Uncommenting DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
trong /etc/default/docker
khi Matt Carrier đề nghị đã không làm việc cho tôi. Cũng không đưa máy chủ DNS của công ty tôi vào tệp đó. Nhưng, có một cách khác (đọc tiếp).
Trước tiên, hãy xác minh vấn đề:
$ docker run --rm busybox nslookup google.com # takes a long time
nslookup: can't resolve 'google.com' # <--- appears after a long time
Server: 8.8.8.8
Address 1: 8.8.8.8
Nếu lệnh xuất hiện bị treo nhưng cuối cùng lại xuất hiện lỗi "không thể giải quyết 'google.com'", thì bạn cũng gặp phải vấn đề giống như tôi.
Các nslookup
lệnh truy vấn DNS Server 8.8.8.8 để chuyển địa chỉ văn bản của 'google.com' sang địa chỉ IP. Trớ trêu thay, 8.8.8.8 là máy chủ DNS công cộng của Google . Nếu nslookup
không thành công, các máy chủ DNS công cộng như 8.8.8.8 có thể bị công ty của bạn chặn (mà tôi cho là vì lý do bảo mật).
Bạn sẽ nghĩ rằng việc thêm các máy chủ DNS của công ty bạn vào DOCKER_OPTS
trong /etc/default/docker
sẽ là một mẹo nhỏ, nhưng vì bất kỳ lý do gì, nó không hoạt động với tôi. Tôi mô tả những gì đã làm việc cho tôi dưới đây.
GIẢI PHÁP :
Trên máy chủ (tôi đang sử dụng Ubuntu 16.04), hãy tìm địa chỉ máy chủ DNS chính và phụ:
$ nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]: 10.0.0.2
IP4.DNS[2]: 10.0.0.3
Sử dụng các địa chỉ này, tạo một tệp /etc/docker/daemon.json
:
$ sudo su root
# cd /etc/docker
# touch daemon.json
Đặt cái này vào /etc/docker/daemon.json
:
{
"dns": ["10.0.0.2", "10.0.0.3"]
}
Thoát khỏi root:
# exit
Bây giờ khởi động lại docker:
$ sudo service docker restart
KIỂM ĐỊNH :
Bây giờ, hãy kiểm tra xem việc thêm /etc/docker/daemon.json
tệp có cho phép bạn phân giải 'google.com' thành địa chỉ IP hay không:
$ docker run --rm busybox nslookup google.com
Server: 10.0.0.2
Address 1: 10.0.0.2
Name: google.com
Address 1: 2a00:1450:4009:811::200e lhr26s02-in-x200e.1e100.net
Address 2: 216.58.198.174 lhr25s10-in-f14.1e100.net
TÀI LIỆU THAM KHẢO :
Tôi dựa trên giải pháp của mình dựa trên một bài báo của Robin Winslow, người xứng đáng nhận được tất cả sự ghi nhận cho giải pháp. Cảm ơn, Robin!
"Sửa cấu hình DNS mạng của Docker." Robin Winslow. Truy cập ngày 11 tháng 11 năm 2016. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
newgrp docker
thay vì thực hiện đăng nhập hoàn toàn rồi đăng nhập sau khi tựsudo usermod -aG docker myuserid
... chắc chắn tuy nhiên điều đó xảy ra