Configurar el acceso remoto para el demonio de Docker
Por defecto, el demonio de Docker escucha las conexiones en un socket Unix para aceptar solicitudes de clientes locales. Puedes configurar Docker para aceptar solicitudes de clientes remotos configurándolo para que escuche en una dirección IP y un puerto, además de en el socket Unix.
WarningConfigurar Docker para aceptar conexiones de clientes remotos puede dejarte vulnerable al acceso no autorizado al host y a otros ataques.
Es de vital importancia que comprendas las implicaciones de seguridad que conlleva abrir Docker a la red. Si no se toman medidas para proteger la conexión, es posible que usuarios remotos sin privilegios de root obtengan acceso de root en el host.
El acceso remoto sin TLS no se recomienda y requerirá una aceptación explícita en una versión futura. Para obtener más información sobre cómo utilizar certificados TLS para proteger esta conexión, consulta Proteger el socket del demonio de Docker.
Habilitar el acceso remoto
Puedes habilitar el acceso remoto al demonio utilizando un archivo de unidad de systemd docker.service para las distribuciones de Linux que usan systemd, o puedes utilizar el archivo daemon.json si tu distribución no utiliza systemd.
Configurar Docker para escuchar conexiones utilizando tanto el archivo de unidad de systemd como el archivo daemon.json provoca un conflicto que impide que Docker se inicie.
Configurar el acceso remoto con el archivo de unidad de systemd
Utiliza el comando
sudo systemctl edit docker.servicepara abrir un archivo de personalización (override) paradocker.serviceen un editor de texto.Añade o modifica las siguientes líneas, sustituyendo tus propios valores:
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375Guarda el archivo.
Recarga la configuración de
systemctl:$ sudo systemctl daemon-reloadReinicia Docker:
$ sudo systemctl restart docker.serviceVerifica que el cambio se haya aplicado correctamente:
$ sudo netstat -lntp | grep dockerd tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Configurar el acceso remoto con daemon.json
Configura la matriz
hostsen el archivo/etc/docker/daemon.jsonpara conectarte al socket Unix y a una dirección IP de la siguiente manera:{ "hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"] }Reinicia Docker.
Verifica que el cambio se haya aplicado correctamente:
$ sudo netstat -lntp | grep dockerd tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Permitir el acceso a la API remota a través de un cortafuegos (firewall)
Si ejecutas un cortafuegos en el mismo host en el que ejecutas Docker y deseas acceder a la API remota de Docker desde otro host remoto, debes configurar tu cortafuegos para permitir conexiones entrantes en el puerto de Docker. El puerto predeterminado es 2376 si utilizas transporte cifrado con TLS, o 2375 en caso contrario.
Dos demonios de cortafuegos comunes son:
- Uncomplicated Firewall (ufw), utilizado a menudo en sistemas Ubuntu.
- firewalld, utilizado a menudo en sistemas basados en RPM.
Consulta la documentación de tu sistema operativo y de tu cortafuegos. La siguiente información puede ayudarte a comenzar. La configuración utilizada en estas instrucciones es permisiva y es posible que prefieras utilizar una configuración diferente que restrinja más tu sistema.
Para ufw, establece
DEFAULT_FORWARD_POLICY="ACCEPT"en tu configuración.Para firewalld, añade reglas similares a las siguientes a tu política: una para solicitudes entrantes y otra para solicitudes salientes.
<direct> [ <rule ipv="ipv6" table="filter" chain="FORWARD_direct" priority="0"> -i zt0 -j ACCEPT </rule> ] [ <rule ipv="ipv6" table="filter" chain="FORWARD_direct" priority="0"> -o zt0 -j ACCEPT </rule> ] </direct>Asegúrate de que los nombres de las interfaces y de las cadenas sean correctos.
Información adicional
Para obtener información más detallada sobre las opciones de configuración para el acceso remoto al demonio, consulta la referencia de la CLI de dockerd.