Pasos posteriores a la instalación para Linux
Tiempo de lectura estimado: 15 minutos
Esta sección contiene procedimientos opcionales para configurar hosts Linux para que funcionen mejor con Docker.
- Administrar Docker como usuario no root
- Configurar Docker para que se inicie al arrancar
- Utilice un motor de almacenamiento diferente
- Configurar controlador de registro predeterminado
- Configurar dónde el demonio Acoplable escucha conexiones
- Configurar el acceso remoto con el archivo de unidad systemd
- Configuración de acceso remoto con el demonio.json
- Habilitar IPv6 en el demonio Acoplable
- Solución de problemas
- Compatibilidad del núcleo
- No se puede conectar al demonio Acoplable
- Problemas de reenvío de IP
- Solucionador de DNS encontrado en resolv.los sistemas Linux que utilizan una interfaz gráfica de usuario a menudo tienen un administrador de red en ejecución, que utiliza una instanciadnsmasqque se ejecuta en una dirección de bucle invertido como127.0.0.1 o 127.0.1.1 para almacenar en caché las solicitudes DNS, y agrega esta entrada a/etc/resolv.conf. El servicio dnsmasq acelera las búsquedas de actualizaciones y también proporciona servicios DHCP. Esta configuración no funciona dentro de un contenedor Docker que tenga su propio espacio de nombres de red, porque el contenedor Docker resuelve direcciones de bucle invertido como 127.0.0.1 para sí mismo, y es muy poco probable que ejecute un servidor DNS en su propia dirección de bucle invertido.
- Especificar servidores DNS para Docker
- Desactivar dnsmasq
- Ubuntu
- RHEL, CentOS o Fedora
- Permitir el acceso a la API remota a través de un firewall
- Su núcleo no admite capacidades de límite de intercambio de cgroup
Administrar Docker como usuario no root
El demonio Docker se enlaza a un socket Unix en lugar de a un puerto TCP. Por defecto, el socket Unix es propiedad del usuario root
y otros usuarios solo pueden acceder a él usando sudo
. El demonio Docker siempre se ejecuta como el usuario root
.
Si no desea introducir el comando docker
con sudo
, cree un Unixgroup llamado docker
y añádale usuarios. Cuando se inicia el demonio Docker, crea un socket Unix al que pueden acceder los miembros del grupo docker
.
Warning
El
docker
grupo otorga privilegios equivalente a la etiquetaroot
usuario. Para obtener más información sobre cómo afecta esto a la seguridad de su sistema, consulte Superficie de ataque del Demonio seeDocker.
Nota:
Para ejecutar Docker sin privilegios de root, vea el demonio Docker como usuario no root (modo sin raíz).
Para crear el docker
grupo y agregar tu usuario:
-
Crear el
docker
grupo.$ sudo groupadd docker
-
Añadir el usuario a la etiqueta
docker
grupo.$ sudo usermod -aG docker $USER
-
cerrar Sesión y volver a iniciarla para que su grupo de pertenencia es re-evaluado.
Si se realiza una prueba en una máquina virtual, puede ser necesario reiniciar la máquina virtual para que los cambios surtan efecto.
En un entorno Linux de escritorio como X Windows, cierre la sesión por completo y, a continuación, vuelva a iniciar sesión.
En Linux, también puede ejecutar el siguiente comando para activar los cambios en los grupos:
$ newgrp docker
-
Compruebe que puede ejecutar
docker
comandos sinsudo
.$ docker run hello-world
Este comando descarga una imagen de prueba y la ejecuta en un contenedor. Cuando el contenedor se ejecuta, imprime un mensaje informativo y sale.
Si inicialmente ejecutó comandos CLI de Docker utilizando
sudo
antes de agregar a su usuario al grupodocker
, puede ver el siguiente error,que indica que su directorio~/.docker/
se creó con permisos incorrectos debido alsudo
comandos.WARNING: Error loading config file: /home/user/.docker/config.json -stat /home/user/.docker/config.json: permission denied
Para solucionar este problema, elimine el directorio
~/.docker/
(se vuelve a crear automáticamente, pero se pierden los ajustes personalizados), o cambie su propiedad y permisos mediante los siguientes comandos:$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R$ sudo chmod g+rwx "$HOME/.docker" -R
Configurar Docker para que se inicie al arrancar
La mayoría de las distribuciones de Linux actuales (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 y higher) use
systemd
para administrar qué servicios se inician cuando el sistema arranque. En Debian y Ubuntu, el servicio Docker está configurado para iniciarse en el arranque por defecto. Para iniciar automáticamente Docker y Containerd en el arranque de otherdistros, utilice los siguientes comandos:$ sudo systemctl enable docker.service$ sudo systemctl enable containerd.service
Para deshabilitar este comportamiento, use
disable
En su lugar.$ sudo systemctl disable docker.service$ sudo systemctl disable containerd.service
Si necesita agregar un proxy HTTP, establecer un directorio o partición diferente para los archivos de tiempo de ejecución del bloqueador o realizar otras personalizaciones, consulte personalizar las opciones del demonio acoplable de systemd.
Utilice un motor de almacenamiento diferente
Para obtener información sobre los diferentes motores de almacenamiento, consulte controladores de almacenamiento.El motor de almacenamiento predeterminado y la lista de motores de almacenamiento compatibles dependen de la distribución Linux de su host y de los controladores de kernel disponibles.
Configurar controlador de registro predeterminado
Docker proporciona la capacidad de recopilar y ver datos de registro de todos los contenedores que se ejecutan en un host a través de una serie de controladores de registro. El controlador de registro predeterminado,
json-file
, escribe datos de registro en archivos con formato JSON en el sistema de archivos host. Con el tiempo, estos archivos de registro se expanden en tamaño, lo que lleva al agotamiento potencial de los recursos del disco.Para aliviar estos problemas, configure el controlador de registro
json-file
para habilitar la rotación de registros, use un controlador de registro alternativo, como el controlador de registro «local» que realiza la rotación de registros de forma predeterminada, o use un controlador de registro que envíe registros a un agregador de registros remoto.Configurar dónde el demonio Acoplable escucha conexiones
De forma predeterminada, el demonio acoplable escucha conexiones en un socket UNIX para aceptar solicitudes de clientes locales. Es posible permitir que Docker acepte solicitudes de hosts remotos configurándolo para que escuche en una dirección IP y un puerto, así como en el socket UNIX. Para obtener información más detallada sobre esta opción de configuración, eche un vistazo a la sección «Vincular Docker a otro host/puerto o a un socket unix» del artículo de referencia de la CLI de Docker.
Asegure su conexión
Antes de configurar Docker para aceptar conexiones de hosts remotos, es de vital importancia que comprenda las implicaciones de seguridad de abrir docker a la red. Si no se toman medidas para asegurar la conexión, es posible que los usuarios remotos que no son root obtengan acceso root en el host. Para obtener más información sobre cómo usar certificados TLS para proteger esta conexión, consulte este artículo sobre cómo proteger el socket de demonio de Docker.
La configuración de Docker para aceptar conexiones remotas se puede hacer con el archivo de unidad
docker.service
systemd para distribuciones Linux que utilizan systemd, como versiones recientes de RedHat, CentOS, Ubuntu y SLES, o con el archivodaemon.json
que se recomienda para distribuciones de Linux que no utilizan systemd.systemd vs daemon.json
Configurar Docker para escuchar conexiones usando el archivo de unidad
systemd
y el archivodaemon.json
causa un conflicto que impide que se inicie Docker.Configurar el acceso remoto con el archivo de unidad systemd
-
Utilice el comando
sudo systemctl edit docker.service
para abrir un archivo de anulación paradocker.service
en un editor de texto. -
Agregue o modifique las siguientes líneas, sustituyendo sus propios valores.
ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
-
Guarde el archivo.
-
Vuelva a cargar la configuración
systemctl
.$ sudo systemctl daemon-reload
-
Reinicie ventana acoplable.
$ sudo systemctl restart docker.service
-
Compruebe si el cambio fue honrado por la revisión de la salida de
netstat
para confirmardockerd
está escuchando en el puerto configurado.$ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Configuración de acceso remoto con el demonio.json
-
Establezca el array
hosts
en el array/etc/docker/daemon.json
para conectarse al socket UNIX y a una dirección IP, de la siguiente manera:{ "hosts": }
-
Reinicie Docker.
-
Compruebe si el cambio fue honrado por la revisión de la salida de
netstat
para confirmardockerd
está escuchando en el puerto configurado.$ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Habilitar IPv6 en el demonio Acoplable
Para habilitar IPv6 en el demonio acoplable, consulte Habilitar la compatibilidad con IPv6.
Solución de problemas
Compatibilidad del núcleo
Docker no se puede ejecutar correctamente si el núcleo es anterior a la versión 3.10 o si faltan algunos módulos. Para comprobar la compatibilidad del núcleo, puede descargar andrun el script
check-config.sh
.$ curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh$ bash ./check-config.sh
El script solo funciona en Linux, macOS no.
No se puede conectar al demonio Acoplable
Si ve un error como el siguiente, su cliente Acoplable puede estar configurado para conectarse a un demonio acoplable en un host diferente, y ese host puede no ser accesible.
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
Para ver a qué host está configurado el cliente para conectarse, compruebe el valor de la variable
DOCKER_HOST
en su entorno.$ env | grep DOCKER_HOST
Si este comando devuelve un valor, el cliente Docker se establece para conectarse al demonio aDocker que se ejecuta en ese host. Si no está configurado, el cliente Acoplable se establece para conectarse al demonio Acoplable que se ejecuta en el host local. Si se establece en el error,utilice el siguiente comando para deshacer:
$ unset DOCKER_HOST
puede Que necesite modificar su entorno en archivos como
~/.bashrc
o~/.profile
para evitar que elDOCKER_HOST
variable se seterroneously.Si
DOCKER_HOST
está configurado de la forma prevista, compruebe que el demonio acoplable se está ejecutando en el host remoto y que un cortafuegos o una interrupción de la red no le impide conectarse.Problemas de reenvío de IP
Si configura manualmente su red con
systemd-network
consystemd
versión 219 o superior, es posible que los contenedores Docker no puedan acceder a su red.Comenzando consystemd
versión 220, la configuración de reenvío para una red determinada(net.ipv4.conf.<interface>.forwarding
) está desactivada por defecto. Esta configuración evita el reenvío de IP. También entra en conflicto con el comportamiento de Docker de habilitar la configuraciónnet.ipv4.conf.all.forwarding
dentro de los contenedores.Para solucionar esto en RHEL, CentOS o Fedora, edite el archivo
<interface>.network
en/usr/lib/systemd/network/
en su host Acoplable(por ejemplo,/usr/lib/systemd/network/80-container-host0.network
) y agregue el siguiente bloque dentro del ....IPForward=kernel# ORIPForward=true
Esta configuración permite el reenvío de IP desde el contenedor como se esperaba.
Si Docker detecta que ningún servidor DNS al que se haga referencia en
/etc/resolv.conf
es un servidor DNS funcional, se produce la siguiente advertencia y Docker utiliza los servidores publicDNS proporcionados por Google en8.8.8.8
y8.8.4.4
para la resolución de DNS.WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containerscan't use it. Using default external servers :
Si ve esta advertencia, primero verifique si usa
dnsmasq
:$ ps aux |grep dnsmasq
Si su contenedor necesita resolver hosts que son internos de su red, los servidores de nombres públicos no son adecuados. Tiene dos opciones:
- Puede especificar un servidor DNS para que Docker lo use, o
- Puede deshabilitar
dnsmasq
en NetworkManager. Si hace esto, Networkmanageragrega su servidor de nombres DNS verdadero a/etc/resolv.conf
, pero pierde los posibles beneficios dednsmasq
.
Solo necesita usar uno de estos métodos.
Especificar servidores DNS para Docker
La ubicación predeterminada del archivo de configuración es
/etc/docker/daemon.json
. Puede cambiar la ubicación del archivo de configuración utilizando el indicador de demonio--config-file
. La documentación a continuación asume que el archivo de configuración está ubicado en/etc/docker/daemon.json
.-
Cree o edite el archivo de configuración del demonio acoplable, que por defecto es
/etc/docker/daemon.json
, que controla la configuración del demonio acoplable.$ sudo nano /etc/docker/daemon.json
-
Añadir un
dns
tecla con una o más direcciones IP de los valores. Si el archivo tiene contenido existente, solo necesita agregar o editar la líneadns
.{ "dns": }
Si su servidor DNS interno no puede resolver direcciones IP públicas, incluya al menos un servidor DNS que sí pueda, para que pueda conectarse a Docker Hub y que sus contenedores puedan resolver nombres de dominio de Internet.
Guarde y cierre el archivo.
-
Reinicie el demonio Docker.
$ sudo service docker restart
-
Compruebe que la ventana acoplable puede resolver direcciones IP externas tratando de tirar de animage:
$ docker pull hello-world
-
Si es necesario, compruebe que la ventana acoplable contenedores pueden resolver interno hostnameby ping a él.
$ docker run --rm -it alpine ping -c4 <my_internal_host>PING google.com (192.168.1.2): 56 data bytes64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms
Desactivar
dnsmasq
Ubuntu
Si usted prefiere no cambiar la ventana acoplable configuración del demonio para utilizar un specificIP dirección, siga estas instrucciones para deshabilitar
dnsmasq
en NetworkManager.-
Edite el archivo
/etc/NetworkManager/NetworkManager.conf
. -
Comente la línea
dns=dnsmasq
añadiendo un carácter#
al comienzo de la línea.# dns=dnsmasq
Guarde y cierre el archivo.
-
Reinicie NetworkManager y Docker. Como alternativa, puede reiniciar su sistema.
$ sudo restart network-manager$ sudo restart docker
RHEL, CentOS o Fedora
Para desactivar
dnsmasq
en RHEL, CentOS o Fedora:-
Deshabilitar el
dnsmasq
servicio de:$ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
-
Configure los servidores DNS manualmente utilizando la documentación de Hat.
Permitir el acceso a la API remota a través de un firewall
Si ejecuta un firewall en el mismo host que ejecuta Docker y desea acceder a la API remota de Docker desde otro host y el acceso remoto está habilitado, debe configurar su firewall para permitir conexiones entrantes en el puerto de Docker,que por defecto es
2376
si el transporte cifrado TLS está habilitado o2375
de lo contrario.Dos demonios de cortafuegos comunes son UFW (Cortafuegos sin complicaciones) (a menudo utilizado para sistemas Ubuntu) y firewalld (a menudo utilizado para sistemas basados en RPM). Consulte la documentación de su sistema operativo y firewall, pero la siguiente información puede ayudarlo a comenzar. Estas opciones son bastante permisivas y es posible que desee usar una configuración diferente que bloquee más su sistema.
-
UFW: Establezca
DEFAULT_FORWARD_POLICY="ACCEPT"
en su configuración. -
firewalld: Agregue reglas similares a las siguientes a su política (una para solicitudes entrantes y otra para solicitudes salientes). Asegúrese de que los nombres de interfaz y los nombres de cadena sean correctos.
<direct> </direct>
Su núcleo no admite capacidades de límite de intercambio de cgroup
En hosts Ubuntu o Debian, es posible que vea mensajes similares a los siguientes cuando trabaje con una imagen.
WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
Esta advertencia no se produce en sistemas basados en RPM, que habilitan estas capacidades de forma predeterminada.
Si no necesita estas capacidades, puede ignorar la advertencia. Puede habilitar estas capacidades en Ubuntu o Debian siguiendo estas instrucciones. La contabilidad de memoria y de intercambio genera una sobrecarga de aproximadamente el 1% de la memoria total disponible y una degradación del rendimiento general del 10%, incluso si Docker no se está ejecutando.
-
Inicie sesión en el host de Ubuntu o Debian como usuario con privilegios
sudo
. -
Edite el archivo
/etc/default/grub
. Agregue o edite la líneaGRUB_CMDLINE_LINUX
para agregar los dos pares clave-valor siguientes:GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
Guarde y cierre el archivo.
-
Actualizar GRUB.
$ sudo update-grub
Si su archivo de configuración de GRUB tiene una sintaxis incorrecta, un error occurs.In en este caso, repita los pasos 2 y 3.
Los cambios surten efecto cuando se reinicia el sistema.
-
- Eche un vistazo a los módulos de formación de primeros pasos para aprender a crear una imagen y ejecutarla como una aplicación en contenedores.
- Revise los temas de Desarrollar con Docker para aprender a crear nuevas aplicaciones con Docker.
Docker, documentación de Docker, requisitos, apt, instalación, ubuntu, instalar, desinstalar, actualizar, actualizar
-