Làm cách nào để đặt tên máy chủ trong docker-soạn?


120

Trong docker-compose.ymlhồ sơ của tôi , tôi có những thứ sau. Tuy nhiên vùng chứa không nhận giá trị tên máy chủ. Có ý kiến ​​gì không?

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

Khi tôi kiểm tra tên máy chủ trong vùng chứa, nó không nhận affy.


1
Bạn đang sử dụng phiên bản Soạn thư nào?
kojiro

Câu trả lời:



57

Điều này dường như hoạt động chính xác. Nếu tôi đặt cấu hình của bạn vào một tệp:

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

Và sau đó đưa mọi thứ lên:

$ 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

Và sau đó kiểm tra tên máy chủ bên trong vùng chứa, mọi thứ dường như ổn:

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

1
Bạn đang sử dụng phiên bản Soạn thư nào?
kojiro

Định dạng này không hoạt động trong phiên bản mới nhất của trình soạn thảo văn bản. Các tệp YML là những thứ kỳ quặc; bạn có chắc đây là định dạng phù hợp cho dns?
George Stocker

3
Các tệp YML thực sự không phải là tất cả những thứ phức tạp như vậy. "Không hoạt động" có nghĩa là gì? Theo các tài liệu , cả hai hostnamedomainnameđều là docker-compose.ymlcác tùy chọn hợp lệ . Cập nhật: vừa được thử nghiệm, dường như vẫn hoạt động tốt (docker-soạn phiên bản 1.4.2, docker phiên bản 1.8.2).
larsks

Có cách nào để hiển thị tên máy chủ này bên ngoài môi trường docker không? Sẽ thật tuyệt nếu máy chủ có thể truy cập các thùng chứa docker bằng tên dns của chúng.
Paul Praet

1
Điều đó là có thể, và có lẽ xứng đáng là câu hỏi của riêng nó. Nếu bạn tìm kiếm "docker dns", bạn sẽ tìm thấy một số kết quả có liên quan; hãy nhìn vào những gì ở đó trước.
larsks

53

Tôi thấy rằng tên máy chủ không hiển thị với các vùng chứa khác khi sử dụng docker run. Điều này hóa ra là một vấn đề đã biết (có lẽ là một tính năng được biết đến nhiều hơn), với một phần của cuộc thảo luận là:

Chúng ta có thể nên thêm cảnh báo vào tài liệu về việc sử dụng tên máy chủ. Tôi nghĩ rằng nó hiếm khi hữu ích.

Cách chính xác để gán tên máy chủ - về mạng vùng chứa - là xác định một bí danh như sau:

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

Thật không may, điều này vẫn không hoạt động với docker run. Cách giải quyết là gán tên cho vùng chứa:

docker-compose run --name alias1 some-service

alias1sau đó có thể được ping từ các container khác.


10
Tôi bị mắc kẹt với vấn đề đó là tôi không thể truy cập vùng chứa bằng tên chủ từ các vùng chứa khác. Và bạn là người duy nhất trong toàn bộ internet những người tuyên bố vấn đề này .. được googling cho 20 giờ đã
Holms

7
Ở đây cũng vậy! Thật điên rồ khi hàng triệu nhà phát triển dường như sử dụng Docker, nhưng không ai biết cách đặt một cái tên đơn giản cho hộp, thậm chí không phải các tài liệu pháp lý. Cảm ơn bạn rất nhiều :)
Sliq

1
Chỉ trong trường hợp, bây giờ chúng ta có thể sử dụng --use-aliasesvới docker-compose run. Điều này sẽ tránh mã hóa cứng bí danh trên runlệnh
Grilix

38

Dựa trên tài liệu về docker: https://docs.docker.com/compose/compose-file/#/command

Tôi chỉ đơn giản là đưa hostname: <string> vào tập tin soạn thư của mình.

Ví dụ:

[...]

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

[...]

và vùng chứa lb01 chọn at-lb01làm tên máy chủ.


nếu bạn có nhiều vùng chứa trong tệp docker-comp, bạn có đặt tên máy chủ cho từng vùng chứa không? điều đó có vẻ rất kém hiệu quả?
vgoklani 19/09/17

6
Nếu bạn cần những cái tên nổi tiếng cho các thùng chứa thì đó là một giải pháp khả thi.
Marcello Romani

9

Cách đơn giản nhất mà tôi đã tìm thấy là chỉ cần đặt tên vùng chứa trong tài liệu docker-compose.ymlXem container_name . Nó có thể áp dụng cho docker-compo v1 +. Nó hoạt động đối với thùng chứa đến thùng chứa, không phải từ máy chủ đến thùng chứa.

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

Bây giờ bạn sẽ có thể truy cập affytừ các vùng chứa khác bằng cách sử dụng tên vùng chứa. Tôi đã phải làm điều này cho nhiều máy chủ redis trong môi trường phát triển.

LƯU Ý Giải pháp hoạt động miễn là bạn không cần phải mở rộng quy mô. Chẳng hạn như môi trường nhà phát triển cá nhân nhất quán.


Theo Compose 3.7cách duy nhất tôi có thể nhìn thấy tên máy chủ của dịch vụ cơ sở dữ liệu từ bên trong một vùng chứa dịch vụ khác của cùng một ngăn xếp là đặt tên dịch vụ là tên máy chủ. Sử dụng thuộc hostname:tính không thành công. Sử dụng môi trường HOSTNAME = cấu trúc cũng không thành công.
Stephane

Một giải pháp khác cũng hoạt động là sử dụng thuộc aliasestính như được mô tả trong fozgiải pháp.
Stephane

1
Điều này hoạt động tốt nhưng hơi lộn xộn - bây giờ tôi đã bắt đầu thiết lập container_namehostnamecùng một giá trị để đạt được những gì tôi cần
Oliver Dungey

3

Tôi cần quay vùng chứa freeipa để có một kdc hoạt động và phải đặt cho nó một tên máy chủ nếu không nó sẽ không chạy. Điều cuối cùng đã làm được đối với tôi là đặt HOSTNAMEbiến env trong soạn thư:

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

Bây giờ nó đang hoạt động:

docker exec -it freeipa_freeipa_1 hostname
ipa.example.test

2
Đối với tôi, sử dụng mỏng, mà kết quả trong một biến môi trường HOSTNAME mà không có tác dụng ở tất cả trên hostname thực tế của container
Oliver Dungey

2
Mặc dù điều này có thể đã hoạt động với vùng chứa bạn đang sử dụng, nhưng chỉ thị môi trường chỉ hiển thị các biến cho vùng chứa. Nó vẫn phụ thuộc vào vùng chứa để làm điều gì đó với giá trị đã đặt. Trong nhiều trường hợp, nó có thể sẽ không làm gì cả.
MrJohnBBQ

để lộ một env var không liên quan gì đến tên máy chủ của vùng chứa, chúng là hai lĩnh vực riêng biệt.
Marcello Romani
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.