Tôi đang chạy docker-compose với node:4.2.1-wheezy
và dnsdock
vùng chứa.Docker DNS getaddrinfo ENOTFOUND
Tôi có DOCKER_OPTS="--dns 172.17.42.1"
bên trong/etc/default/docker.
Khi tôi chạy node -e "require('dns').resolve('host_name_here')"
bên trong vùng chứa node.js của mình, máy chủ được giải quyết chính xác thông qua máy chủ dns 172.17.42.1.
Nhưng khi tôi chạy node -e "require('dns').lookup('host_name_here')"
không thành công với lỗi ENOTFOUND
.
Và vấn đề là http.request
sử dụng dns.lookup
thay vì dns.resolve
.
The docs say rằng dns.lookup
gọi getaddrinfo
. Và theo tôi hiểu được getaddrinfo
cache /etc/resolv.conf và có thể nó lưu trữ rỗng /etc/resolv.conf (nhưng cat /etc/resolv.conf
in nameserver 172.17.42.1
).
Tôi thực sự không biết cách giải quyết vấn đề này. Điều gì có thể gây ra hành vi như vậy?
Update 1.
docker -v
Docker version 1.7.1, build 786b29d
docker-compose -v
docker-compose version: 1.4.2
Cập nhật 2.
tôi cập nhật tất cả mọi thứ lên phiên bản mới nhất (1.9.0 Docker, Docker-soạn 1.5.0 và nút lên đến 5,0 .0) nhưng vấn đề vẫn tồn tại.
Vì vậy, đây là Docker-compose.yml rằng tái tạo vấn đề:
dnsdock:
image: tonistiigi/dnsdock
volumes:
- /var/run/docker.sock:/run/docker.sock
ports:
- "172.17.42.1:53:53/udp"
environment:
- DNSDOCK_ALIAS=dns.org
node:
image: node:5.0.0-wheezy
command: node -e "setTimeout(function() { var dns = require('dns'); dns.resolve('dns.org', console.log.bind(console, 'resolve')); dns.lookup('dns.org', console.log.bind(console, 'lookup')); }, 5000)"
dns: 172.17.42.1
Bạn nên thay thế 172.17.42.1
với IP của giao diện docker0 của bạn. Cần setTimeout(..., 5000)
vì vùng chứa node
có thể bắt đầu trước dnsdock
.
Đây là docker-compose up
đầu ra của tôi:
Creating test_node_1
Creating test_dnsdock_1
Attaching to test_node_1, test_dnsdock_1
dnsdock_1 | 2015/11/07 09:29:44 Added service: 3653951cff40c06c04b9ab3f5d2fc94ccc19305eaac7ba1a545ce1dbab3e3e17 {test_dnsdock_1 dnsdock 172.17.42.3 -1 [dns.org]}
dnsdock_1 | 2015/11/07 09:29:44 Added service: 36577feea136bc713f77b64b2a6a9712cd509c47ca55427f6749308cc5a4b140 {test_node_1 node 172.17.42.2 -1 []}
node_1 | resolve null [ '172.17.42.3' ]
node_1 | lookup { [Error: getaddrinfo ENOTFOUND dns.org]
node_1 | code: 'ENOTFOUND',
node_1 | errno: 'ENOTFOUND',
node_1 | syscall: 'getaddrinfo',
node_1 | hostname: 'dns.org' }
dnsdock_1 | 2015/11/07 09:29:49 Stopped service: 36577feea136bc713f77b64b2a6a9712cd509c47ca55427f6749308cc5a4b140
test_node_1 exited with code 0
Bạn có thể chia sẻ trình tạo docker hay không.yml sao chép thiết lập của bạn? –
Cũng vui lòng xem xét bao gồm một tập lệnh mẫu để tái tạo điều này. –