Je ne suis pas un expert docker non plus.
Ce lien explique que Docker a un DNS intégré
Et comme expliqué, il faut que les containers soient sur le même réseau docker.
Si tu as plusieurs services dans un même docker compose, et que tu ne précise rien pour le network, ils seront par défaut dans le même network “default” pour ce “projet”/compose
Et comme je disais, pour avoir un nom dns (interne au réseau docker) simple, il suffit de préciser une valeur unique pour “container_name” dans chaque service (au même niveau que “image”)
Pour tester la résolution du dns, tu peux démarrer un shell dans un container qui tourne et faire un “ping [valeur du container_name]” par exemple.
Edit: quand ping
n’est pas dans l’image; faire getent hosts [valeur du container_name]
Je peux donner mon docker compose.yaml en exemple.
services:
duniter-v2s-validator:
image: nicolas80/duniter-v2s-gdev-800:latest
platform: linux/arm64/v8
container_name: duniter-v2s-gdev-validator
restart: unless-stopped
ports:
# (Private) Prometheus (for monitoring)
# can't seem to add it as a data source in grafana :-/
- 127.0.0.1:9616:9615
- 127.0.0.1:9945:9944
- 127.0.0.1:30334:30333
#- 0.0.0.0:30334:30333
volumes:
- data-validator:/var/lib/duniter/
environment:
# gdev, gtest or g1
- DUNITER_CHAIN_NAME=gdev
- DUNITER_VALIDATOR=true
- DUNITER_PRUNING_PROFILE=light # <--- stays light
- DUNITER_NODE_NAME=Nicolas80-GDev-smith
# exposing through NGinx reverse proxy as WSS WebSocketSecured
- DUNITER_PUBLIC_ADDR=/dns/smith.gdev.de.brussels.ovh/tcp/443/wss
- DUNITER_LISTEN_ADDR=/ip4/0.0.0.0/tcp/30333/ws
# Alternative to directly expose port 30334 (in that case; need change ports to have "0.0.0.0:30334:30333" instead of "127.0.0.1:30334:30333")
#- DUNITER_PUBLIC_ADDR=/dns/smith.gdev.brussels.ovh/tcp/30334
#- DUNITER_LISTEN_ADDR=/ip4/0.0.0.0/tcp/30333
networks:
dockge_dockge_net: null
distance-oracle:
image: nicolas80/duniter-v2s-gdev-800:latest
container_name: distance-oracle
entrypoint: docker-distance-entrypoint # other entrypoint
environment:
ORACLE_RPC_URL: ws://duniter-v2s-gdev-validator:9944 # container_name from SMITH node above
ORACLE_RESULT_DIR: /var/lib/duniter/chains/gdev/distance/ # should match network
ORACLE_EXECUTION_INTERVAL: 200 # <--- should be adjusted based on network
volumes:
- data-validator:/var/lib/duniter/ # use same volume
networks:
dockge_dockge_net: null
volumes:
data-validator: null
networks:
dockge_dockge_net:
external: true
Dans celui-ci, j’utilise un même “external” docker network dockge_dockge_net
sur lequel j’ai plusieurs docker compose connectés; notament mon “NGinx Proxy Manager” qui me permet de mapper des DNS externes vers du DNS docker interne spécifique + port
Exemple concret de l’usage du DNS interne docker:
Depuis le docker compose SMITH + Oracle (il faut donner le nom de service
pour les commandes compose)
docker compose exec duniter-v2s-validator /bin/bash
# ip/ifconfig pas disponible dans les images => hostname -I
hostname -I
172.21.0.12
# Changement de shell pour celui de l'Oracle
docker compose exec distance-oracle /bin/bash
hostname -I
172.21.0.16
# On arrive bien à résourdre le DNS vers le SMITH
# Ping n'est pas disponible dans les images => getent hosts <container_name>
getent hosts duniter-v2s-gdev-validator
172.21.0.12 duniter-v2s-gdev-validator
Depuis mon docker compose de NGinx Proxy Manager (configuré sur le même Docker network dockge_dockge_net
)
docker compose exec nginx-proxy-manager /bin/bash
hostname -I
172.21.0.4
getent hosts nginx-proxy-manager
172.21.0.4 nginx-proxy-manager
getent hosts duniter-v2s-gdev-validator
172.21.0.12 duniter-v2s-gdev-validator
getent hosts distance-oracle
172.21.0.16 distance-oracle
Et pour terminer mon exemple; dans mon NGinx Proxy Manager, je peux donc faire un Proxy pour mapper l’url et dns public “https://smith.gdev.brussels.ovh/” vers l’url et Dns interne docker + port http://duniter-v2s-gdev-validator:30333/