web-dev-qa-db-fra.com

Comment définir le nom d'hôte dans Docker Compose?

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
82
David Medinets

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.

28
foz

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
45
larsks

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.

26
Marcello Romani

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
3
Roy Golan

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.

1
K.J.