Articles

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

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 etiqueta rootusuario. 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:

  1. Crear el docker grupo.

    $ sudo groupadd docker
  2. Añadir el usuario a la etiqueta docker grupo.

    $ sudo usermod -aG docker $USER
  3. 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 
  4. Compruebe que puede ejecutar docker comandos sin sudo.

    $ 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 grupo docker, puede ver el siguiente error,que indica que su directorio ~/.docker/ se creó con permisos incorrectos debido al sudo 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) usesystemd 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, usedisable 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.servicesystemd para distribuciones Linux que utilizan systemd, como versiones recientes de RedHat, CentOS, Ubuntu y SLES, o con el archivo daemon.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 archivo daemon.json causa un conflicto que impide que se inicie Docker.

    Configurar el acceso remoto con el archivo de unidad systemd

    1. Utilice el comando sudo systemctl edit docker.service para abrir un archivo de anulación para docker.service en un editor de texto.

    2. 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
    3. Guarde el archivo.

    4. Vuelva a cargar la configuración systemctl.

       $ sudo systemctl daemon-reload
    5. Reinicie ventana acoplable.

      $ sudo systemctl restart docker.service
    6. Compruebe si el cambio fue honrado por la revisión de la salida de netstat para confirmar dockerd 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

    1. 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": }
    2. Reinicie Docker.

    3. Compruebe si el cambio fue honrado por la revisión de la salida de netstat para confirmar dockerd 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 el DOCKER_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 con systemdversión 219 o superior, es posible que los contenedores Docker no puedan acceder a su red.Comenzando con systemd 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ón net.ipv4.conf.all.forwarding dentro de los contenedores.

      Para solucionar esto en RHEL, CentOS o Fedora, edite el archivo <interface>.networken /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.

      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.

      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 en 8.8.8.8 y 8.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 de dnsmasq.

      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.

      1. 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
      2. 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ínea dns.

        { "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.

      3. Reinicie el demonio Docker.

        $ sudo service docker restart
      4. Compruebe que la ventana acoplable puede resolver direcciones IP externas tratando de tirar de animage:

        $ docker pull hello-world
      5. 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.

      1. Edite el archivo /etc/NetworkManager/NetworkManager.conf.

      2. Comente la línea dns=dnsmasq añadiendo un carácter # al comienzo de la línea.

        # dns=dnsmasq

        Guarde y cierre el archivo.

      3. 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:

      1. Deshabilitar el dnsmasq servicio de:

        $ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
      2. 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 o 2375de 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.

        1. Inicie sesión en el host de Ubuntu o Debian como usuario con privilegios sudo.

        2. Edite el archivo/etc/default/grub. Agregue o edite la línea GRUB_CMDLINE_LINUX para agregar los dos pares clave-valor siguientes:

          GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

          Guarde y cierre el archivo.

        3. 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