2016-02-18 21 views
6

Tôi có một số dịch vụ chạy trong vùng chứa docker và một máy chủ nginx ở phía trước, tất cả các vùng chứa trong cùng một mạng docker. Trước khi docker 1.10 Tôi đã tạo một container dnsmasq và nằm trong nginx set resolver để nó có thể được phát hiện từ nginx.Nginx không nhận được máy chủ lưu trữ từ DNS nhúng trong docker 1.10.1

Nhưng sau khi nâng cấp lên docker 1.10.1, hình ảnh dnsmasq không hoạt động. Sau một số nghiên cứu, tôi đã cố gắng sử dụng "nhúng dns" mới từ địa chỉ 127.0.0.11 thay vào đó (mà tôi nghĩ rằng nên là cách chính xác để sử dụng trong mạng docker). Mặc dù tôi có thể ping đến container dịch vụ từ nginx container, nhưng nginx tiếp tục gửi lại could not be resolved (3: Host not found).

Và sau đó tôi cố gắng sử dụng lệnh chủ, tôi có kết quả rất khó hiểu: (địa chỉ ip đầu tiên, và sau đó không nhận diện - cùng một mã như tôi nhận được từ nginx)

# host service-ui 
service-ui has address 172.18.0.7 
Host service-ui not found: 3(NXDOMAIN) 
Host service-ui not found: 3(NXDOMAIN) 

Ping làm việc

/# ping service-ui 
PING service-ui (172.18.0.7): 56 data bytes 
64 bytes from 172.18.0.7: icmp_seq=0 ttl=64 time=1.123 ms 
64 bytes from 172.18.0.7: icmp_seq=1 ttl=64 time=0.131 ms 
64 bytes from 172.18.0.7: icmp_seq=2 ttl=64 time=0.178 ms 

Sau đây là một phiên bản đơn giản của cấu hình của tôi:

Docker-compose.yml

version: '2' 

services: 
    nginx: 
    build: . 
    ports: 
     - 80:80 
    service-ui: 
    image: service-ui 
networks: 
    default: 
    external: 
     name: ssx 

nginx.conf trong container

location ~ /([a-z]*)/ { 
    resolver 127.0.0.11; 
    proxy_pass http://$1-ui:9000$uri$is_args$args; 
} 

Đây cũng là kết quả tiết từ máy chủ:

# host -v service-ui 
Trying "service-ui" 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55237 
;; flags: qr rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 

;; QUESTION SECTION: 
;service-ui.   IN A 

;; ANSWER SECTION: 
service-ui.  1800 IN A 172.18.0.7 

Received 52 bytes from 127.0.0.11#53 in 1 ms 
Trying "service-ui" 
Host service-ui not found: 3(NXDOMAIN) 
Received 102 bytes from 127.0.0.11#53 in 1 ms 
Received 102 bytes from 127.0.0.11#53 in 1 ms 
Trying "service-ui" 
Host service-ui not found: 3(NXDOMAIN) 
Received 102 bytes from 127.0.0.11#53 in 1 ms 
Received 102 bytes from 127.0.0.11#53 in 1 ms 

phiên bản Docker My

Client: 
Version:  1.10.1 
API version: 1.22 
Go version: go1.5.3 
Git commit: 9e83765 
Built:  Thu Feb 11 19:27:08 2016 
OS/Arch:  linux/amd64 

Server: 
Version:  1.10.1 
API version: 1.22 
Go version: go1.5.3 
Git commit: 9e83765 
Built:  Thu Feb 11 19:27:08 2016 
OS/Arch:  linux/amd64 

bất cứ ai có thể giúp tôi tìm ra những gì đi sai ? Hoặc làm cách nào để tìm hiểu vấn đề này?

Trả lời

9

Điều này là do máy chủ Docker dns không làm ipv6, nhưng các truy vấn nginx Resolver cho cả IPv6 và IPv4 như của 1.5.8: http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver

Bạn có thể tắt ipv6 dễ dàng đủ trên dòng phân giải trong nginx (xem liên kết ở trên, nó chỉ là ipv6 = off) và sau đó nó sẽ bắt đầu làm việc cho bạn.

+0

Cảm ơn bạn @phobologic, đã làm việc như một sự quyến rũ – waterscar

+0

OMG! Tôi đã bị mắc kẹt về vấn đề này trong nhiều giờ, nghĩ rằng đó là cấu hình nginx của tôi (tôi khá mới để nginx) nhưng thực sự bạn đã giải quyết nó @phobologic. Cảm ơn bạn đã giúp đỡ! – nschoe

+1

Phiên bản Engine 1.11 bao gồm hỗ trợ cho ipv6 ngay bây giờ. Xem thông báo trên blog: https://blog.docker.com/2016/04/docker-engine-1-11-runc/ – Subfuzion

Các vấn đề liên quan