มีการอภิปรายกันมานานหลายครั้งเกี่ยวกับวิธีการทำเช่นนี้อย่างสม่ำเสมอเข้าใจได้ดีและสามารถพกพาได้ ไม่มีการแก้ปัญหาที่สมบูรณ์ แต่ฉันจะเชื่อมโยงคุณไปยังการสนทนาด้านล่าง
ในกรณีใด ๆ ที่คุณต้องการลองใช้อ็อพชัน --add-host เพื่อให้นักเทียบท่าทำงานเพื่อเพิ่มที่อยู่ IP ของโฮสต์ลงในไฟล์ / etc / host ของคอนเทนเนอร์ จากนั้นการเชื่อมต่อกับโฮสต์บนพอร์ตที่ต้องการนั้นเป็นเรื่องเล็กน้อย:
การเพิ่มรายการลงในไฟล์โฮสต์ของคอนเทนเนอร์
คุณสามารถเพิ่มโฮสต์อื่นลงในไฟล์ / etc / hosts ของคอนเทนเนอร์โดยใช้แฟล็ก --add-host อย่างน้อยหนึ่งรายการ ตัวอย่างนี้เพิ่มที่อยู่แบบคงที่สำหรับโฮสต์ชื่อนักเทียบท่า:
$ docker run --add-host=docker:10.180.0.1 --rm -it debian
$$ ping docker
PING docker (10.180.0.1): 48 data bytes
56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms
56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms
^C--- docker ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms
หมายเหตุ: บางครั้งคุณต้องเชื่อมต่อกับโฮสต์ Docker ซึ่งหมายถึงการรับที่อยู่ IP ของโฮสต์ คุณสามารถใช้คำสั่งเชลล์ต่อไปนี้เพื่อลดความซับซ้อนของกระบวนการนี้:
$ alias hostip="ip route show 0.0.0.0/0 | grep -Eo 'via \S+' | awk '{ print $2 }'"
$ docker run --add-host=docker:$(hostip) --rm -it debian
เอกสารอ้างอิง:
https://docs.docker.com/engine/reference/commandline/run/
การสนทนาเกี่ยวกับการเข้าถึงโฮสต์จากคอนเทนเนอร์:
https://github.com/docker/docker/issues/1143
https://github.com/docker/docker/issues/10023