Docker-composer conteneur à l'aide d'hôte DNS du serveur
Je suis à court de plusieurs conteneurs sur mon "Ubuntu 16.10 Serveur" dans une "coutume" pont réseau avec composer 2.9 (dans un yml version 2.1). La plupart de mes contenants à l'interne utilisant les mêmes ports, donc il n'y a aucun moyen pour moi d'utiliser le "host" pilote de réseau.
Mes conteneurs sont tous des liens ensemble, à l'aide de l'dédié links
attribut.
Mais, j'ai aussi besoin d'accéder à des services exposés à l'extérieur de mon conteneurs. Ces services ont consacré des URL avec des noms enregistrés dans mon entreprise de serveur DNS.
Alors que je n'ai pas de problème à utiliser des DNS publics et de la portée de toute la fonction publique à partir de l'intérieur de mes récipients, j'ai juste ne peut pas atteindre mon DNS privé.
S'il vous plaît, connaissez-vous une solution pour usage privé DNS à partir d'un conteneur? Ou mieux encore, utiliser réseau de l'hôte de configuration DNS?
PS: bien sûr, je peux accéder à mes services de la société à l'aide de la extra_hosts
attribut dans mes services dans mon menu fixe-composer.fichier yml. Mais... c'est définitivement pas le but d'avoir un DNS. Je ne veux pas enregistrer tous mes services dans mon fichier YML, et je ne veux pas le mettre à jour à chaque fois des services de propriété intellectuelle sont mis à jour dans mon entreprise.
Contexte :
- De l'hôte: Ubuntu 16.10 serveur
- Docker Moteur: 1.12.6
- Docker Composer: 1.9.0
- docker-composer.yml: 2.1
- Réseau: Propre pont.
docker-composer.fichier yml (extrait):
version: '2.1'
services:
nexus:
image: sonatype/nexus3:$NEXUS_VERSION
container_name: nexus
restart: always
hostname: nexus.$URL
ports:
- "$NEXUS_81:8081"
- "$NEXUS_443:8443"
extra_hosts:
- "repos.private.network:192.168.200.200"
dns:
- 192.168.3.7
- 192.168.111.1
- 192.168.10.5
- 192.168.10.15
volumes_from:
- nexus-data
networks:
- pic
networks:
pic:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.18.0.0/16
gateway: 172.18.0.1
J'ai essayé avec et sans le ipam
de configuration pour le pic
réseau, sans aucune chance.
Tests & Résultats:
docker exec -ti nexus curl repos.private.network
renvoie correctement la page HTML desservis par ce service
docker exec -ti nexus curl another-service.private.network
Retourne curl: (6) Could not resolve host: another-service.private.network; Name or service not known
Alors que curl another-service.private.network
de l'hôte retourne le code HTML de la page.
Et "bien sûr" another-service.private.network
est connu dans ma 4 serveurs DNS (192.168.3.7, 192.168.111.1, 192.168.10.5, 192.168.10.15).
Cheers,
Olivier.
OriginalL'auteur Olivier | 2017-01-18
Vous devez vous connecter pour publier un commentaire.
Vous ne précisez pas dans quel environnement vous êtes en cours d'exécution docker-composition de l'e.g Mac, Windows ou Unix, donc ça dépendra un peu de ce que des changements sont nécessaires. Vous ne précisez pas si vous utilisez la valeur par défaut pont réseau dans le panneau de l'utilisateur créé pont réseau.
Dans les deux cas, par défaut, le Panneau devraient essayer de carte de la résolution DNS à partir du Panneau d'Accueil dans vos contenants. Donc, si votre Panneau d'Accueil qui peut résoudre le privé adresses DNS, puis dans la théorie de vos contenants devraient être en mesure de.
Je vous recommande la lecture de cet officiel Docker documentation du DNS comme il est assez raisonnable. Ici par défaut le Panneau de pont réseau, ici pour l'utilisateur créé pont de réseaux.
Une légère gotcha est si vous êtes en cours d'exécution à l'aide de Docker pour Mac, menu fixe de la Machine ou de Docker pour Windows, vous devez vous rappeler que votre Panneau d'Accueil est en fait la VM en cours d'exécution sur votre machine et pas le physique de la boîte elle-même, de sorte que vous devez vous assurer que la machine virtuelle a la bonne résolution DNS options de jeu. Vous aurez besoin de redémarrer votre contenants pour la modification de la résolution DNS pour être ramassé par eux.
Vous pouvez bien sûr remplacer tous les paramètres par défaut à l'aide de
docker-compose
. Il a plein d'options pour définir explicitement les serveurs DNS, DNS options de recherche etc. À titre d'exemple:Vous trouverez la documentation de ces fonctions ici.
OriginalL'auteur Rob Blake