2015-04-28 5 views
33

В моем файле docker-compose.yml у меня есть следующее. Однако контейнер не получает значение имени хоста. Есть идеи?Как установить имя хоста в Docker Compose?

dns: 
    image: phensley/docker-dns 
    hostname: affy 
    domainname: affy.com 
    volumes: 
    - /var/run/docker.sock:/docker.sock 
+2

Я отредактированный свой вопрос правильно отображать форматированный текст. Это делает его более читаемым. – larsks

+1

Какую версию Compose вы используете? – kojiro

ответ

23

Это, кажется, работает правильно. Если я кладу свой конфиг в файл:

$ cat > compose.yml <<EOF 
dns: 
    image: phensley/docker-dns 
    hostname: affy 
    domainname: affy.com 
    volumes: 
    - /var/run/docker.sock:/docker.sock 
EOF 

А потом принести вещи:

$ 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 

А затем проверьте имя хоста внутри контейнера, кажется, что все будет в порядке:

$ docker exec -it stack_dns_1 hostname 
affy.affy.com 
+0

Какую версию Compose вы используете? – kojiro

+0

Этот формат не работает в последней версии docker-compose. Файлы YML - это тонкие вещи; вы уверены, что это правильный формат для dns? –

+2

Файлы YML на самом деле не так уж и сложны. Что означает «не работает»?Согласно [docs] (https://docs.docker.com/compose/compose-file/), как 'hostname', так и' domainname' являются действительными параметрами 'docker-compose.yml'. Обновление: только что протестировано, похоже, все работает очень хорошо (докер-версия 1.4.2, докер версия 1.8.2). – larsks

9

На основании документации докеров: https://docs.docker.com/compose/compose-file/#/command

Я просто положил hostname: <string> в мой файл для докеры.

.: например

[...] 

lb01: 
    hostname: at-lb01 
    image: at-client-base:v1 

[...] 

и контейнер LB01 поднимает at-lb01 как имя хоста.

+0

Если у вас есть несколько контейнеров в файле скрепления докеров, вы бы установили имя хоста для каждого контейнера? что кажется очень неэффективным? – vgoklani

+0

Если вам нужны известные имена для контейнеров, которые являются жизнеспособным решением. –

2

Я обнаружил, что имя хоста не было видно другим контейнерам при использовании docker run. Это, оказывается, чтобы быть known issue (возможно, более известной особенностью), с частью обсуждения существ:

Мы, вероятно, следует добавить предупреждение в документы об использовании имени хоста. Я думаю, что это редко полезно.

Правильный способ присвоения имени хоста - с точки зрения контейнера сети - это define an alias так:

services: 
    some-service: 
    networks: 
     some-network: 
     aliases: 
      - alias1 
      - alias2 

К сожалению, эта еще не работает с docker run. Чтобы обойти эту проблему, чтобы присвоить контейнеру имя:

docker-compose run --name alias1 some-service 

И alias1 может быть пингуется из других контейнеров.

1

Мне нужно было согнуть freeipa container, чтобы иметь рабочий kdc и ему пришлось указывать имя хоста, иначе оно не запускалось. Что в конце концов сделал работу для меня установка переменной HOSTNAME ENV в композе:

version: 2 
services: 
    freeipa: 
    environment: 
     - HOSTNAME=ipa.example.test 

Сейчас его работы:

docker exec -it freeipa_freeipa_1 hostname 
ipa.example.test 
Смежные вопросы