Dans mon fichier docker-compose.yml, j'ai les éléments suivants. Cependant, le conteneur ne récupère pas la valeur du nom d'hôte. Des idées?
dns:
image: phensley/docker-dns
hostname: affy
domainname: affy.com
volumes:
- /var/run/docker.sock:/docker.sock
J'ai trouvé que le nom d'hôte n'était pas visible par les autres conteneurs lors de l'utilisation de docker run
. Cela s'avère être un problème conn (peut-être davantage une fonctionnalité connue), une partie de la discussion étant:
Nous devrions probablement ajouter un avertissement aux docs concernant l'utilisation du nom d'hôte. Je pense que c'est rarement utile.
La manière correcte d’attribuer un nom d’hôte - en termes de réseau de conteneur - est de définir un alias comme suit:
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias2
Malheureusement, ceci toujours ne fonctionne pas avec docker run
. La solution consiste à attribuer un nom au conteneur:
docker-compose run --name alias1 some-service
Et alias1
peut ensuite être envoyé à partir des autres conteneurs.
Cela semble fonctionner correctement. Si je mets votre configuration dans un fichier:
$ cat > compose.yml <<EOF
dns:
image: phensley/docker-dns
hostname: affy
domainname: affy.com
volumes:
- /var/run/docker.sock:/docker.sock
EOF
Et puis remonter les choses:
$ docker-compose -f compose.yml up
Creating tmp_dns_1...
Attaching to tmp_dns_1
dns_1 | 2015-04-28T17:47:45.423387 [dockerdns] table.add tmp_dns_1.docker -> 172.17.0.5
Et puis vérifiez le nom d’hôte à l’intérieur du conteneur, tout semble aller pour le mieux:
$ docker exec -it stack_dns_1 hostname
affy.affy.com
Basé sur la documentation de docker: https://docs.docker.com/compose/compose-file/#/command
Je mets simplement hostname: <string>
dans mon fichier docker-compose.
Par exemple.:
[...]
lb01:
hostname: at-lb01
image: at-client-base:v1
[...]
et le conteneur lb01 récupère at-lb01
comme nom d'hôte.
J'avais besoin de tourner conteneur freeipa pour avoir un kdc qui fonctionnait et je devais lui donner un nom d'hôte, sinon il ne fonctionnerait pas. Ce qui a finalement fonctionné pour moi, c’est de définir la variable HOSTNAME
env dans compose:
version: 2
services:
freeipa:
environment:
- HOSTNAME=ipa.example.test
Maintenant son fonctionnement:
docker exec -it freeipa_freeipa_1 hostname
ipa.example.test
La méthode la plus simple que j'ai trouvée consiste à définir simplement le nom du conteneur dans la documentation docker-compose.yml
Voir nom_conteneur . Il est applicable à docker-compose v1 +. Cela fonctionne d'un conteneur à l'autre, et non de l'ordinateur hôte à un conteneur.
services:
dns:
image: phensley/docker-dns
container_name: affy
Vous devriez maintenant pouvoir accéder à affy
à partir d'autres conteneurs en utilisant le nom du conteneur. Je devais le faire pour plusieurs serveurs Redis dans un environnement de développement.
NOTE La solution fonctionne tant que vous n'avez pas besoin de faire évoluer votre système. Tels que des environnements de développement individuels consistants.