Docker · Ubuntu

Docker no usa los mismos DNS que el host

Docker_(container_engine)_logo

Docker, para los contenedores que no definen su propia red – donde docker usa su dns interno que «delega» en el del host -, rellena el fichero /etc/resolv.conf de los contenedores copiando el /etc/resolv.conf del host y filtrando cualquier servidor de nombres local como podría ser 127.0.0.53.  Si no hay ningún otro servidor de nombres, Docker añadirá los servidores DNS públicos de Google (8.8.8.8 y 8.8.4.4)

En Ubuntu 18.04, y otros sistemas que usan systemd-resolved, /etc/resolv.conf es un enlace a /run/systemd/resolve/stub-resolv.conf y su contenido siempre tiene la ip local 127.0.0.53:

nameserver 127.0.0.53
options edns0

y, como hemos explicado antes, Docker filtra cualquier dirección de loopback al leer el resolv.conf. Por tanto, nuestros contenedores Docker no usaran los DNS que utiliza el host, sino que siempre usará los DNS de Google.

Para solucionar esto, vamos a «tomar control» del fichero /etc/resolv.conf y a realizar las configuraciones necesarias para que los contenedores acaben usando la configuración de DNS del host.

La idea es sencilla.

  1. En /etc/resolv.conf seguiremos referenciando como primer dns el 127.0.0.53 (que sabemos que Docker eliminará)
  2. Además añadimos una nueva entrada referenciando al propio host (para que los contenedores Docker usen el host como servidor DNS)

Seguir leyendo «Docker no usa los mismos DNS que el host»

Docker · Ubuntu

Instalando docker manualmente en Ubuntu 19.10

Docker_(container_engine)_logo
  1. Descarga el archivo de binarios estáticos para tu plataforma desde https://download.docker.com/linux/static/stable/
  2. Extrae el archivo:
    $ tar xzvf /path/to/.tar.gz
  3. Crea enlaces a los binarios en un directorio que esté en tu path de ejecutables, como /usr/local/bin/.
    $ sudo cp -rs $PWD/docker/* /usr/local/bin/
  4. Crea el grupo docker:$ sudo groupadd docker
  5. Añade a tu usuario al grupo docker:
    $ sudo usermod -aG docker $USER
  6. Cierra tu sesión y vuelve a abrirla de modo que tu pertenencia a los grupos sea re-evaluada.
    NOTA: A partir de Ubuntu 18.04, cuando sales de la sesión de Gnome, algunos de los procesos del usuario no finalizan instantáneamente y si vuelves a iniciar sesión se recupera la que ya tenías (y por tanto, no se re-evalúan los grupos). Puedes forzar a que se detengan todos tus procesos ejecutando el comando (asegúrate de haber salvado todo tu trabajo antes de ejecutar este comando ya que matará tu sesión actual):
    $ loginctl terminate-user $USER

    Alternativamente puedes activar el nuevo grupo en tu actual terminar (y solo en ella) ejecutando el comando:
    $ newgrp docker

Ahora podemos probar la instalación.

  1. Arranca el demonio dockerd:
    $ sudo dockerd &
  2. Comprueba que la instalación ha sido correcta:
    $ 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 de información y finaliza.
  3. Finaliza el demonio que hemos arrancado manualmente:
    $ sudo killall dockerd


Ahora que ya está instalado y hemos comprobado que funciona correctamente seguramente querremos integrar Docker con systemd. Para conseguirlo, instala los dos ficheros de unidad (service y socket) del repositorio de github en /etc/systemd/system.

Seguir leyendo «Instalando docker manualmente en Ubuntu 19.10»
Docker · Ubuntu

Cómo cambiar el directorio de instalación de las imágenes de Docker

Docker_(container_engine)_logo

Es posible cambiar el directorio base de almacenamiento de Docker (donde se guardan las imágenes y los contenedores) usando la opción -g en el arranque del demonio Docker.

  • Ubuntu/Debian:
    Edita el fichero /etc/default/docker para añadir la opción -g a la variable DOCKER_OPTS:
    DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
  • Fedora/Centos:
    Edita el fichero /etc/sysconfig/docker y añade la opción -g en la variable other_args:
    other_args="-g /var/lib/testdir"

Si hay más de una opción, asegúrate de englobarlas en " ". Tras un reinicio (service docker restart) Docker debería usar el nuevo directorio.

Otro método de cambiar el almacenamiento es mediante el uso de enlaces simbólicos.

Seguir leyendo «Cómo cambiar el directorio de instalación de las imágenes de Docker»