GNU/Linux >> Tutoriales Linux >  >> Linux

Configuración del nombre de host en Docker Compose

¿Se pregunta cómo configurar el nombre de host en Docker Compose? Te mostraré eso.

Puede definirlo en el servicio de esta manera:

...
letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    hostname: ledocker
    ...

¿Pero realmente necesitas eso? El objetivo general del nombre de host es que las computadoras en la red se conozcan entre sí y, por lo tanto, se comuniquen entre sí.

De manera similar, el objetivo principal aquí es garantizar que los contenedores puedan comunicarse entre sí con éxito dentro de una red Docker.

Voy a discutir dos formas de hacer esto posible:

Método 1:Comunicación no explícita

Dentro de una red Docker, los nombres de servicio definidos dentro de un archivo Docker Compose se pueden usar para probar si los contenedores pueden comunicarse entre sí.

Tomemos, por ejemplo, la siguiente configuración de proxy inverso:

version: '3.7'

services:

  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./html:/usr/share/nginx/html
      - ./dhparam:/etc/nginx/dhparam
      - ./vhost:/etc/nginx/vhost.d
      - ./certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    restart: always
    networks:
      - net

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    env_file:
      - ./letsencrypt.env
    depends_on:
      - nginx-proxy
    volumes:
      - ./certs:/etc/nginx/certs:rw
      - ./vhost:/etc/nginx/vhost.d
      - ./html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always
    networks:
      - net

networks:
  net:
    external: true

Tenga en cuenta que los dos nombres de servicio son nginx-proxy y letsencrypt . Puede usar estos nombres para probar si los contenedores pueden comunicarse entre sí o no. Esto puede ser muy útil durante situaciones de resolución de problemas.

Primero, instale ping dentro del contenedor de Nginx Reverse Proxy:

[email protected]:~/nginx-proxy$ docker-compose exec nginx-proxy bash -c "apt update && apt install -y iputils-ping"

Ahora, puede usar el comando ping dentro de este contenedor para verificar si puede comunicarse con el contenedor Let's Encrypt (usado para SSL).

[email protected]:~/nginx-proxy$ sudo docker-compose exec nginx-proxy ping letsencrypt
PING letsencrypt (172.18.0.3) 56(84) bytes of data.
64 bytes from nginx-proxy_letsencrypt_1.net (172.18.0.3): icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from nginx-proxy_letsencrypt_1.net (172.18.0.3): icmp_seq=2 ttl=64 time=0.057 ms
^C
--- letsencrypt ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 37ms

Como puede ver arriba, el contenedor de proxy inverso "ve" el segundo contenedor SSL que envía una respuesta. En nginx-proxy_letsencrypt_1.net , nginx-proxy_letsencrypt_1 es el nombre del contenedor SSL y net es nuestra red personalizada.

Verifiquemos rápidamente:

[email protected]:~/nginx-proxy$ sudo docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED         STATUS         PORTS     NAMES
a9ef56e22f58   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   7 minutes ago   Up 7 minutes             nginx-proxy_letsencrypt_1
563133f5d039   jwilder/nginx-proxy                      "/app/docker-entrypo…"   7 minutes ago   Up 7 minutes             nginx-proxy_nginx-proxy_1

Para verificar la red, puede usar docker network ls comando.

[email protected]:~/nginx-proxy$ sudo docker network ls
NETWORK ID     NAME                DRIVER    SCOPE
018c50dc4fdc   bridge              bridge    local
27fd2370e735   net                 bridge    local
38ce8d11227b   host                host      local
2440210d0fc5   none                null      local

Método 2:Comunicación Explícita

Digamos que, por algún motivo, desea especificar explícitamente un nombre de host para un contenedor. ¡Docker Compose te permite hacer eso también!

Usando el hostname opción de configuración, puede establecer un nombre de host diferente para cualquier servicio definido dentro de un archivo Docker Compose, como lo he hecho para el servicio Let's Encrypt a continuación:

version: '3.7'

services:

  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./html:/usr/share/nginx/html
      - ./dhparam:/etc/nginx/dhparam
      - ./vhost:/etc/nginx/vhost.d
      - ./certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    restart: always
    networks:
      - net

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    hostname: ledocker
    env_file:
      - ./letsencrypt.env
    depends_on:
      - nginx-proxy
    volumes:
      - ./certs:/etc/nginx/certs:rw
      - ./vhost:/etc/nginx/vhost.d
      - ./html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always
    networks:
      - net

networks:
  net:
    external: true

Aquí, tenga en cuenta que agregué explícitamente hostname: ledocker dentro de la definición del servicio Let's Encrypt. Quiero usar ledocker como nombre de host para el contenedor SSL.

Pero espera, ¿podemos volver a verificar usando el comando ping?

[email protected]:~/nextcloud$ sudo docker-compose exec nginx-proxy ping ledocker
PING ledocker (172.18.0.3) 56(84) bytes of data.
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=1 ttl=64 time=0.034 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=2 ttl=64 time=0.079 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=3 ttl=64 time=0.061 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=4 ttl=64 time=0.093 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=5 ttl=64 time=0.078 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=6 ttl=64 time=0.075 ms
^C
--- ledocker ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 129ms
rtt min/avg/max/mdev = 0.034/0.070/0.093/0.018 ms

De hecho si. ¡Funciona!

Hambre de más conocimiento en este sentido? Echa un vistazo a este hilo de GitHub extremadamente informativo.

¡Espero que hayas disfrutado este consejo rápido! Puedes dejar cualquier consulta, duda o sugerencia en la sección de comentarios a continuación.


Linux
  1. Cómo usar Docker Compose

  2. ¿Qué hay de nuevo en Docker Compose v2?

  3. Una guía rápida para usar Docker Compose

  4. Cómo instalar Docker Compose en Ubuntu 18.04

  5. Docker componer volumen Permisos linux

De Docker Compose a Kubernetes con Podman

Cómo instalar Docker Compose en Debian 9 Stretch

Cómo instalar Docker Compose en CentOS 7

Cómo instalar Docker Compose en Ubuntu

Docker File vs Docker Compose:¿Cuál es la diferencia?

Instale y use Docker Compose con Docker en Ubuntu 22.04