uncommenting DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
ใน/etc/default/docker
ขณะที่แมตต์ Carrierปัญหาไม่ไม่ทำงานสำหรับฉัน ไม่ได้ใส่เซิร์ฟเวอร์ DNS ของ บริษัท ของฉันไว้ในไฟล์นั้น แต่มีอีกวิธีหนึ่ง (อ่านต่อ)
ขั้นแรกให้ตรวจสอบปัญหา:
$ 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
หากคำสั่งดูเหมือนจะหยุดทำงาน แต่ในที่สุดก็เกิดข้อผิดพลาด "ไม่สามารถแก้ไข" google.com "ได้แสดงว่าคุณมีปัญหาเช่นเดียวกับฉัน
nslookup
คำสั่ง queries เซิร์ฟเวอร์ DNS 8.8.8.8 เพื่อเปิดที่อยู่ข้อความของ 'google.com' เป็นที่อยู่ IP กระแทกแดกดัน 8.8.8.8 เป็นเซิร์ฟเวอร์ DNS สาธารณะของ Google หากnslookup
ล้มเหลวบริษัท ของคุณอาจบล็อกเซิร์ฟเวอร์ DNS สาธารณะเช่น 8.8.8.8 (ซึ่งฉันถือว่าเป็นเพราะเหตุผลด้านความปลอดภัย)
คุณคิดว่าการเพิ่มเซิร์ฟเวอร์ DNS ของ บริษัท ของคุณเข้าไปDOCKER_OPTS
ใน/etc/default/docker
นั้นน่าจะเป็นการหลอกลวง แต่ไม่ว่าด้วยเหตุผลใดก็ไม่ได้ผลสำหรับฉัน ฉันอธิบายสิ่งที่ได้ผลสำหรับฉันด้านล่าง
วิธีแก้ปัญหา :
บนโฮสต์ (ฉันใช้ Ubuntu 16.04) ค้นหาที่อยู่เซิร์ฟเวอร์ DNS หลักและรอง:
$ nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]: 10.0.0.2
IP4.DNS[2]: 10.0.0.3
ใช้ที่อยู่เหล่านี้สร้างไฟล์/etc/docker/daemon.json
:
$ sudo su root
# cd /etc/docker
# touch daemon.json
ใส่สิ่งนี้ใน/etc/docker/daemon.json
:
{
"dns": ["10.0.0.2", "10.0.0.3"]
}
ออกจากรูท:
# exit
ตอนนี้รีสตาร์ทนักเทียบท่า:
$ sudo service docker restart
การยืนยัน :
ตรวจสอบว่าการเพิ่ม/etc/docker/daemon.json
ไฟล์ช่วยให้คุณสามารถแก้ไข 'google.com' ในที่อยู่ IP ได้:
$ 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
ข้อมูลอ้างอิง :
ฉันใช้วิธีแก้ปัญหาของฉันจากบทความของ Robin Winslow ซึ่งสมควรได้รับเครดิตทั้งหมดสำหรับการแก้ปัญหานี้ ขอบคุณโรบิน!
"แก้ไขการกำหนดค่า DNS เครือข่ายของ Docker" โรบินวินสโลว์ สืบค้นเมื่อ 2016-11-09. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/
newgrp docker
แทนที่จะทำการล็อกอินแบบเต็มจากนั้นเข้าสู่ระบบหลังจากให้ตัวเองsudo usermod -aG docker myuserid
... มันเป็นเคสขอบสำหรับ ไม่ว่าจะเกิดขึ้นแน่นอน