Docker-compose'da ana bilgisayar adını nasıl ayarlarım?


120

Dosyamda docker-compose.ymlaşağıdakiler var. Ancak konteyner, ana bilgisayar adı değerini almaz. Herhangi bir fikir?

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

Kapsayıcıdaki ana bilgisayar adını kontrol ettiğimde açmıyor affy.


1
Compose'un hangi sürümünü kullanıyorsunuz?
kojiro

Yanıtlar:



57

Bu doğru çalışıyor gibi görünüyor. Yapılandırmanızı bir dosyaya koyarsam:

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

Ve sonra bazı şeyleri gündeme getirin:

$ 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

Ve sonra konteynerin içindeki ana bilgisayar adını kontrol edin, her şey yolunda görünüyor:

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

1
Compose'un hangi sürümünü kullanıyorsunuz?
kojiro

Bu biçim, docker-compose'un en son sürümünde çalışmaz. YML dosyaları titiz şeylerdir; Bunun dns için doğru format olduğundan emin misiniz?
George Stocker

3
YML dosyaları gerçekten o kadar titiz değildir. "Çalışmıyor" ne anlama geliyor? Göre docs , hem hostnameve domainnamegeçerli docker-compose.ymlseçenekler. Güncelleme: yeni test edildi, hala gayet iyi çalışıyor gibi görünüyor (docker-compose sürüm 1.4.2, docker sürüm 1.8.2).
larsks

Docker ortamının dışında bu ana bilgisayar adını ifşa etmenin bir yolu var mı? Ana bilgisayarın docker konteynerlerine dns adlarıyla erişebilmesi güzel olurdu.
Paul Praet

1
Bu mümkün ve muhtemelen kendi sorusuna değer. "Docker dns" yi ararsanız, birkaç alakalı sonuç bulacaksınız; önce orada ne olduğuna bir göz atın.
larsks

53

Kullanırken ana makine adının diğer kapsayıcılar tarafından görünmediğini fark ettim docker run. Bu , tartışmanın bir parçasıyla birlikte bilinen bir sorun (belki daha çok bilinen bir özellik) olarak ortaya çıkıyor:

Belgelere ana bilgisayar adını kullanma konusunda muhtemelen bir uyarı eklemeliyiz. Nadiren faydalı olduğunu düşünüyorum.

Bir ana bilgisayar adı atamanın doğru yolu - kapsayıcı ağ iletişimi açısından - aşağıdaki gibi bir takma ad tanımlamaktır :

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

Maalesef bu hala işe yaramıyor docker run. Çözüm, kapsayıcıya bir ad atamaktır:

docker-compose run --name alias1 some-service

Ve alias1daha sonra diğer kaplardan pinglenebilir.

GÜNCELLEME: @grilix'in işaret ettiği gibi docker-compose run --use-aliases, tanımlanan takma adları kullanılabilir hale getirmek için kullanmalısınız .


11
Konteynere diğer konteynerlerden hosname ile erişemediğim için bu problemle sıkışıp kaldım. Ve bütün internette bu sorunu ifade eden tek kişi sensin .. 20 saattir
Google'da arama yapıyorum

7
Burada aynı! Milyonlarca geliştiricinin Docker kullanıyor gibi görünmesi delilik, ancak kimse bir kutuya basit bir ad vermeyi bilmiyor, resmi dokümanlar bile. Çok teşekkür ederim :)
Sliq

1
Her ihtimale karşı, şimdi kullanabilirsiniz --use-aliasesile docker-compose run. Bu, takma adı runkomuta
kodlamaktan kaçınacaktır

38

Docker belgelerine göre: https://docs.docker.com/compose/compose-file/#/command

hostname: <string> Docker-compose dosyamı koydum .

Örneğin:

[...]

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

[...]

ve kapsayıcı lb01 at-lb01, ana bilgisayar adı olarak alır .


docker-compose dosyasında birden fazla kapsayıcınız varsa, her kapsayıcı için ana bilgisayar adını belirler miydiniz? bu çok verimsiz görünüyor?
vgoklani

6
Konteynerler için iyi bilinen isimlere ihtiyacınız varsa, bu uygun bir çözümdür.
Marcello Romani

9

Bulduğum en basit yol, container_name belgelerine docker-compose.ymlbakın . Docker-compose v1 + için geçerlidir. Ana makineden konteynere değil konteynere konteynere çalışır.

services:
  dns:
    image: phensley/docker-dns
    container_name: affy

Artık affy, konteyner adını kullanarak diğer konteynerlerden erişebilmelisiniz . Bunu bir geliştirme ortamında birden çok redis sunucusu için yapmak zorunda kaldım.

NOT Çözüm, ölçeklendirmeniz gerekmediği sürece işe yarar. Tutarlı bireysel geliştirici ortamları gibi.


Gelen Compose 3.7tek yolu aynı yığının başka servis kabının içinden görülecek veritabanı hizmeti hostname var hostname olarak hizmet isim oldu. Özelliği kullanmak hostname:başarısız oldu. HOSTNAME = yapı ortamını kullanmak da başarısız oldu.
Stephane

Yine işe yarayan başka bir çözüm, aliasesözelliği fozçözümde açıklandığı gibi kullanmaktı .
Stephane

1
Bu harika çalışıyor ama biraz dağınık - Şimdi ihtiyacım olanı elde etmek için ayarlamaya container_nameve hostnameaynı değere
alıştım

3

Çalışan bir kdc'ye sahip olmak için freeipa kabını döndürmem gerekiyordu ve ona bir ana bilgisayar adı vermem gerekiyordu, aksi halde çalışmazdı. Sonunda benim için işe HOSTNAMEyarayan şey, compose'da env değişkenini ayarlamak oldu :

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

Şimdi çalışıyor:

docker exec -it freeipa_freeipa_1 hostname
ipa.example.test

2
Benim için, slim kullanmak, kapsayıcının gerçek ana bilgisayar adı üzerinde hiçbir etkisi olmayan bir HOSTNAME ortam değişkenine neden olur
Oliver Dungey

2
Bu, kullandığınız kapsayıcıyla çalışmış olsa da, ortam yönergesi yalnızca değişkenleri kapsayıcıya gösterir. Ayarlanan değerle bir şeyler yapmak hala kapsayıcıya bağlıdır. Çoğu durumda muhtemelen hiçbir şey yapmayacaktır.
MrJohnBBQ

bir env var değişkeninin gösterilmesinin konteynerin ana bilgisayar adıyla hiçbir ilgisi yoktur, bunlar iki ayrı alandır.
Marcello Romani
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.