GNU/Linux >> Linux Esercitazione >  >> Linux

Impostazione del nome host in Docker Compose

Ti chiedi come impostare il nome host in Docker Compose? Te lo mostro.

Puoi definirlo sotto il servizio in questo modo:

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

Ma ne hai davvero bisogno? L'obiettivo generale del nome host è che i computer sulla rete si conoscano e quindi comunichino tra loro.

Allo stesso modo, l'obiettivo principale in questo caso è garantire che i container possano comunicare tra loro con successo all'interno di una rete Docker.

Discuterò due modi per renderlo possibile:

Metodo 1:comunicazione non esplicita

All'interno di una rete Docker, i nomi dei servizi definiti all'interno di un file Docker Compose possono essere utilizzati per verificare se i container possono comunicare tra loro.

Prendi ad esempio la seguente configurazione del 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

Nota che i due nomi di servizio sono nginx-proxy e letsencrypt . È possibile utilizzare questi nomi per verificare se i contenitori possono comunicare tra loro o meno. Questo può rivelarsi molto utile durante le situazioni di risoluzione dei problemi.

Innanzitutto, installa ping all'interno del contenitore Nginx Reverse Proxy:

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

Ora puoi utilizzare il comando ping all'interno di questo contenitore per verificare se può comunicare con Let's Encrypt Container (usato per 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

Come puoi vedere sopra, il container proxy inverso "vede" il secondo container SSL che invia una risposta indietro! In nginx-proxy_letsencrypt_1.net , nginx-proxy_letsencrypt_1 è il nome del contenitore SSL e net è la nostra rete personalizzata.

Verifichiamolo velocemente:

[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

Per verificare la rete, puoi utilizzare 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

Metodo 2:comunicazione esplicita

Supponiamo, per qualche motivo, di voler specificare esplicitamente un nome host in un contenitore. Docker Compose ti consente di farlo anche tu!

Usando il hostname opzione di configurazione, puoi impostare un nome host diverso per qualsiasi servizio definito all'interno di un file Docker Compose, come ho fatto per il servizio Let's Encrypt di seguito:

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

Qui, nota che ho aggiunto esplicitamente hostname: ledocker all'interno della definizione del servizio Let's Encrypt. Voglio usare ledocker come nome host per il contenitore SSL.

Ma aspetta, possiamo ricontrollare di nuovo usando il 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

Si, certo. Funziona!

Vuoi saperne di più su questo argomento? Dai un'occhiata a questo thread GitHub estremamente informativo.

Spero che questo suggerimento rapido ti sia piaciuto! Puoi lasciare qualsiasi domanda, dubbio o suggerimento nella sezione commenti qui sotto.


Linux
  1. Come usare Docker Compose

  2. Cosa c'è di nuovo in Docker Compose v2?

  3. Installa WordPress con Docker Compose, Nginx, Apache con SSL

  4. Docker componi il volume Autorizzazioni linux

  5. Impostazione del nome host:FQDN o nome breve?

Da Docker Compose a Kubernetes con Podman

Come installare Docker Compose su Debian 9 Stretch

Come installare Docker Compose su CentOS 7

Come installare Docker Compose su Ubuntu

Docker File vs Docker Compose:qual è la differenza?

Installa e usa Docker Compose con Docker su Ubuntu 22.04