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!

22
demandé sur Community 2015-07-01 01:16:13

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 .

14
répondu datacarl 2018-08-24 15:58:05
4
répondu Andreas Steffan 2015-07-02 06:27:52

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 .

4
répondu Oliboy50 2018-05-23 16:36:07

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 .

3
répondu Lauri 2016-12-01 03:52:28

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.

3
répondu roGamba 2016-12-07 16:45:46

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>
1
répondu Oscar Llop 2017-06-27 11:44:07