2015-04-28 23 views
33

W moim pliku docker-compose.yml mam następujące. Jednak kontener nie zbiera wartości nazwy hosta. Jakieś pomysły?Jak ustawić nazwę hosta w komponencie Docker?

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

Mam edytowane pytanie poprawnie wyświetlić tekst preformatowany. Dzięki temu jest bardziej czytelny. – larsks

+1

Jakiej wersji Compose używasz? – kojiro

Odpowiedz

23

To wydaje się działać poprawnie. Jeśli mogę umieścić swój config do pliku:

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

A potem przynieść rzeczy:

$ 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 

a następnie sprawdzić nazwę hosta wewnątrz pojemnika, wszystko wydaje się być w porządku:

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

Jakiej wersji Compose używasz? – kojiro

+0

Ten format nie działa w najnowszej wersji funkcji docker-compose. Pliki YML są drobiazgowymi rzeczami; jesteś pewien, że to jest odpowiedni format dla dns? –

+2

Pliki YML nie są tak naprawdę wybredne. Co oznacza "nie działa"?Według [the docs] (https://docs.docker.com/compose/compose-file/) zarówno 'hostname' i' domainname' są poprawnymi opcjami 'docker-compose.yml'. Aktualizacja: po prostu przetestowana, nadal wydaje się działać dobrze (docker-compose wersja 1.4.2, wersja dokowania 1.8.2). – larsks

9

Na podstawie dokumentacji dokowania: https://docs.docker.com/compose/compose-file/#/command

Po prostu wstaw hostname: <string> w moim pliku dokowania.

Np .:

[...] 

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

[...] 

i pojemnik lb01 podnosi at-lb01 jako hosta.

+0

jeśli masz wiele kontenerów w pliku tworzenia dokera, czy ustawisz nazwę hosta dla każdego kontenera? to wydaje się bardzo nieefektywne? – vgoklani

+0

Jeśli potrzebujesz dobrze znanych nazw pojemników, które są realnym rozwiązaniem. –

2

Znalazłem, że nazwa hosta nie była widoczna dla innych pojemników podczas korzystania z docker run. Ten okazuje się być known issue (być może bardziej znany cecha), z częścią istoty dyskusji:

Powinniśmy chyba dodać ostrzeżenie docs temat korzystania z hosta. Myślę, że rzadko jest to przydatne.

Prawidłowy sposób przypisywania hosta - w zakresie sieci pojemnika - jest define an alias tak:

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

Niestety nadal nie działa z docker run. Rozwiązaniem jest przypisanie pojemnikiem nazwę:

docker-compose run --name alias1 some-service 

I alias1 można następnie ping od innych pojemników.

1

Potrzebowałem obrócić freeipa container, aby mieć działający kdc i musiałem nadać mu nazwę hosta, w przeciwnym razie nie działał. Co w końcu udało mi się ustawienie zmiennej HOSTNAME env w Compose:

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

Teraz jego pracy:

docker exec -it freeipa_freeipa_1 hostname 
ipa.example.test 
Powiązane problemy