Existe-t-il un moyen d'atteindre mes conteneurs Docker en utilisant des noms au lieu d'adresses IP?
J'ai entendu parler de la tuyauterie et j'ai vu des options de type DNS et nom d'hôte pour Docker, mais je ne suis toujours pas en mesure de tout assembler.
Merci pour votre temps.
Je ne sais pas si cela est utile, mais c'est ce que j'ai fait jusqu'à présent:
J'ai ajouté une entrée d'alias DNS à mon serveur DNS de réseau privé et elle correspond au nom de machine utilisé par docker-machine. Mais la machine récupère toujours une adresse IP différente lorsqu'elle démarre et se connecte au réseau.
Je suis juste perdu pour savoir où aborder ceci:
Je cherche probablement quelque chose de similaire à cette question:
Toute direction générale sera géniale ... merci encore!
Docker 1.10
possède un DNS intégré. Si vos conteneurs sont connectés au même réseau défini par l'utilisateur (créez un réseau docker network create my-network
et exécutez votre conteneur avec --net my-network
) ils peuvent se référencer en utilisant le nom du conteneur. ( Documents ).
Cool!
Une mise en garde si vous utilisez Docker compose, vous savez qu'il ajoute un préfixe aux noms de vos conteneurs, c'est-à-dire <project name>_<service name>-#
. Cela rend les noms de vos conteneurs un peu plus difficiles à contrôler, mais cela peut convenir à votre cas d'utilisation. Vous pouvez remplacer la fonctionnalité de nommage de docker compose en définissant manuellement le nom du conteneur dans votre modèle de composition, mais vous ne pourrez pas évoluer avec compose .
Créez un nouveau réseau de pont autre que docker0, exécutez vos conteneurs à l'intérieur et vous pouvez référencer les conteneurs à l'intérieur de ce réseau par leurs noms.
Le démon Docker exécute un serveur DNS intégré pour fournir une découverte de service automatique pour les conteneurs connectés à des réseaux définis par l'utilisateur. Les demandes de résolution de noms des conteneurs sont d'abord traitées par le serveur DNS intégré.
Essaye ça:
docker network create <network name>
docker run --net <network name> --name test busybox nc -l 0.0.0.0:7000
docker run --net <network name> busybox ping test
Tout d'abord, nous créons un nouveau réseau. Ensuite, nous exécutons un conteneur busybox nommé test en écoutant sur le port 7000 (juste pour le faire fonctionner). Enfin, nous pingons le conteneur de test par son nom et cela devrait fonctionner.
EDIT 2018-02-17: Docker peut éventuellement supprimer la clé links
de docker-compose, ils suggèrent donc d'utiliser réseaux définis par l'utilisateur comme indiqué ici => https : //docs.docker.com/compose/compose-file/#links
En supposant que vous souhaitez atteindre le conteneur mysql
à partir du conteneur web
de votre docker-compose.yml
fichier, tel que:
web:
build: .
links:
- mysql
mysqlservice:
image: mysql
Vous serez heureux de savoir que Docker Compose ajoute déjà un nom de domaine mysqlservice
(dans le conteneur web
/etc/hosts
) qui pointent vers le conteneur mysql
.
Au lieu de rechercher l'adresse IP du conteneur mysql
, vous pouvez simplement utiliser le nom de domaine mysqlservice
.
Si vous souhaitez ajouter des noms de domaine personnalisés, c'est également possible avec le paramètre extra_hosts .
Vous voudrez peut-être essayer dnsdock. Semble simple et facile (!) À installer. Jetez un œil à http://blog.brunopaz.net/easy-discover-your-docker-containers-with-dnsdock/ et https://github.com/tonistiigi/ dnsdock .
Si vous voulez une solution prête à l'emploi, vous pouvez vérifier par exemple Kontena . Il est livré avec la technologie de superposition de réseau de Weave et cette technologie est utilisée pour créer des réseaux LAN privés virtuels entre les services. Grâce à cela, chaque service/conteneur peut être atteint par service_name.kontena.local
.
J'ai changé le --net
paramètre avec --network
et s'exécute comme prévu:
docker network create <network name>
docker run --network <network name> --name <container name> <other container options>
docker run --network <network name> --name <container name> <other container options>