GNU/Linux >> Tutoriels Linux >  >> Linux

Définition du nom d'hôte dans Docker Compose

Vous vous demandez comment définir le nom d'hôte dans Docker Compose ? Je vais vous montrer ça.

Vous pouvez le définir sous le service comme ceci :

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

Mais en avez-vous vraiment besoin ? L'objectif général du nom d'hôte est que les ordinateurs du réseau se connaissent et communiquent ainsi entre eux.

De même, l'objectif principal ici est de s'assurer que les conteneurs peuvent communiquer entre eux avec succès au sein d'un réseau Docker.

Je vais discuter de deux manières de rendre cela possible :

Méthode 1 :Communication non explicite

Au sein d'un réseau Docker, les noms de service définis dans un fichier Docker Compose peuvent être utilisés pour tester si les conteneurs peuvent communiquer entre eux.

Prenons par exemple la configuration de proxy inverse suivante :

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

Notez que les deux noms de service sont nginx-proxy et letsencrypt . Vous pouvez utiliser ces noms pour tester si les conteneurs peuvent communiquer entre eux ou non. Cela peut s'avérer très utile lors de situations de dépannage.

Tout d'abord, installez ping dans le conteneur Nginx Reverse Proxy :

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

Maintenant, vous pouvez utiliser la commande ping à l'intérieur de ce conteneur pour vérifier s'il peut communiquer avec le conteneur Let's Encrypt (utilisé pour 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

Comme vous pouvez le voir ci-dessus, le conteneur de proxy inverse "voit" le deuxième conteneur SSL qui renvoie une réponse ! Dans nginx-proxy_letsencrypt_1.net , nginx-proxy_letsencrypt_1 est le nom du conteneur SSL et net est notre réseau personnalisé.

Vérifions-le rapidement :

[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

Pour vérifier le réseau, vous pouvez utiliser le docker network ls commande.

[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éthode 2 :Communication explicite

Supposons que, pour une raison quelconque, vous souhaitiez spécifier explicitement un nom d'hôte à un conteneur. Docker Compose vous permet de faire cela aussi !

Utilisation du hostname option de configuration, vous pouvez définir un nom d'hôte différent pour tout service défini dans un fichier Docker Compose, comme je l'ai fait pour le service Let's Encrypt ci-dessous :

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

Ici, notez que j'ai explicitement ajouté hostname: ledocker dans la définition du service Let's Encrypt. Je veux utiliser ledocker comme nom d'hôte pour le conteneur SSL.

Mais attendez, pouvons-nous revérifier en utilisant la commande 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

Oui en effet. Ça marche !

Envie de plus de connaissances à ce sujet ? Consultez ce fil GitHub extrêmement informatif.

J'espère que vous avez apprécié cette astuce rapide ! Vous pouvez laisser des questions, des doutes ou des suggestions dans la section des commentaires ci-dessous.


Linux
  1. Comment utiliser Docker Compose

  2. Un guide rapide pour utiliser Docker Compose

  3. Comment installer Docker Compose sur Ubuntu 18.04

  4. Docker compose le volume Autorisations linux

  5. Définition du nom d'hôte :nom de domaine complet ou nom abrégé ?

De Docker Compose à Kubernetes avec Podman

Comment installer Docker Compose sur Debian 9 Stretch

Comment installer Docker Compose sur CentOS 7

Comment installer Docker Compose sur Ubuntu

Docker File vs Docker Compose :quelle est la différence ?

Installer et utiliser Docker Compose avec Docker sur Ubuntu 22.04