Comment accéder aux conteneurs docker par nom au lieu de l'adresse IP?
y a-t-il un moyen d'atteindre mes conteneurs dockers en utilisant des noms au lieu d'adresses ip?
j'ai entendu parler de la tuyauterie et j'ai vu quelques options de DNS et de nom d'hôte pour docker, mais je suis toujours incapable de tout assembler.
Merci pour votre temps.
Je ne suis pas sûr que cela soit utile, mais c'est ce que j'ai fait jusqu'à présent:
- Docker container host installé utilisant docker-machine et la vmwarevsphere pilote
- a démarré tous les services avec docker-composer
- je peux accéder à tous les services à partir de n'importe quelle autre machine sur le réseau IP et le port
j'ai ajouté un pseudonyme DNS à mon serveur DNS réseau privé et il correspond au nom de la machine qui est utilisé par docker-machine. Mais la machine prend toujours une adresse IP différente quand elle démarre et se connecte au réseau.
je suis juste perdu pour lutter contre cela:
- "151990920 réseau" serveur DNS
- docker-nom d'hôte de la machine
- docker contenant le nom d'hôte
- probablement une combinaison de tous
je cherche probablement quelque chose de semblable à cette question:
comment laisser docker utiliser mon routeur réseau pour assigner dhcp ip à des conteneurs facilement au lieu de la tuyauterie?
N'importe quelle direction générale sera géniale...merci encore!
6 réponses
Docker 1.10
a un construit en DNS. Si vos conteneurs sont connectés au même réseau défini par l'utilisateur (créer un réseau docker network create my-network
et exécuter votre conteneur avec --net my-network
), ils peuvent faire référence les uns aux autres en utilisant le nom du conteneur. ( Docs ).
Cool!
une mise en garde si vous utilisez Docker composer vous savez qu'il ajoute un préfixe à vos noms de conteneur, i.e. <project name>_<service name>-#
. Ce rend votre conteneur des noms un peu plus difficile à contrôler, mais il pourrait être ok pour votre cas d'utilisation. Vous pouvez outrepasser la fonctionnalité de nommage de composition de docker en définissant manuellement le nom du conteneur dans votre modèle de composition, mais alors vous ne serez pas en mesure de mettre à l'échelle avec composer .
vous devriez essayer le DN-Dock. Semble simple et facile(!). Regardez http://blog.brunopaz.net/easy-discover-your-docker-containers-with-dnsdock / et https://github.com/tonistiigi/dnsdock .
MODIFIER 2018-02-17: Docker peut éventuellement supprimer le links
clé à partir d'un menu fixe-composer, par conséquent, ils suggèrent d'utiliser défini par l'utilisateur des réseaux comme indiqué ici => https://docs.docker.com/compose/compose-file/#links
en supposant que vous voulez atteindre le conteneur mysql
à partir du conteneur web
de votre fichier docker-compose.yml
, tels que:
web:
build: .
links:
- mysql
mysqlservice:
image: mysql
vous serez heureux de savoir que Docker Compose déjà ajoute un mysqlservice
nom de domaine (dans le web
conteneur /etc/hosts
) qui pointe vers le mysql
conteneur.
au lieu de chercher l'adresse IP du conteneur mysql
, vous pouvez simplement utiliser le nom de domaine mysqlservice
.
si vous voulez ajouter des noms de domaines personnalisés, c'est également possible avec le paramètre extra_hosts .
si vous voulez sortir de la boîte solution, vous pourriez vouloir cocher Par exemple Kontena . Il est livré avec la technologie de superposition de réseau de tissage et cette technologie est utilisée pour créer des réseaux locaux privés virtuels entre les services. Grâce à cela chaque service/conteneur peut être atteint par service_name.kontena.local
.
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 un service automatique découverte de conteneurs connectés à des réseaux définis par l'utilisateur. Nom les demandes de résolution des conteneurs sont traitées en premier par le serveur DNS intégré.
essayez ceci:
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 ping le récipient d'essai par son nom et il devrait fonctionner.
j'ai changé le paramètre --net
avec le paramètre --network
et il fonctionne 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>