นั่นควรเป็นสิ่งที่--link
มีไว้สำหรับอย่างน้อยก็สำหรับส่วนชื่อโฮสต์
ด้วยDocker 1.10 และ PR 19242นั่นจะเป็น:
docker network create --net-alias=[]: Add network-scoped alias for the container
(ดูหัวข้อสุดท้ายด้านล่าง)
นั่นคือสิ่งที่อัปเดต/etc/hosts
รายละเอียดไฟล์
นอกเหนือจากตัวแปรสภาพแวดล้อม Docker ยังเพิ่มรายการโฮสต์สำหรับคอนเทนเนอร์ต้นทางไปยัง/etc/hosts
ไฟล์
ตัวอย่างเช่นเปิดเซิร์ฟเวอร์ LDAP:
docker run -t --name openldap -d -p 389:389 larrycai/openldap
และกำหนดอิมเมจเพื่อทดสอบเซิร์ฟเวอร์ LDAP นั้น:
FROM ubuntu
RUN apt-get -y install ldap-utils
RUN touch /root/.bash_aliases
RUN echo "alias lds='ldapsearch -H ldap://internalopenldap -LL -b
ou=Users,dc=openstack,dc=org -D cn=admin,dc=openstack,dc=org -w
password'" > /root/.bash_aliases
ENTRYPOINT bash
คุณสามารถแสดง ' openldap
' container as ' internalopenldap
' ภายในภาพทดสอบด้วย --link:
docker run -it --rm --name ldp --link openldap:internalopenldap ldaptest
จากนั้นหากคุณพิมพ์ 'lds' นามแฝงนั้นจะใช้งานได้:
ldapsearch -H ldap://internalopenldap ...
ที่จะส่งคืนผู้คน เข้าถึงความหมายinternalopenldap
ได้อย่างถูกต้องจากldaptest
ภาพ
แน่นอนว่านักเทียบท่า 1.7 จะเพิ่มlibnetwork
ซึ่งให้การใช้งาน Go แบบเนทีฟสำหรับการเชื่อมต่อคอนเทนเนอร์ ดูโพสต์บล็อก
ได้นำเสนอสถาปัตยกรรมที่สมบูรณ์ยิ่งขึ้นด้วย Container Network Model (CNM)
ซึ่งจะอัปเดต Docker CLI ด้วยคำสั่ง "เครือข่าย" ใหม่และบันทึกวิธีใช้-net
แฟล็ก "" เพื่อกำหนดคอนเทนเนอร์ให้กับเครือข่าย
นักเทียบท่า 1.10 มีส่วนใหม่นามแฝงขอบเขตเครือข่ายซึ่งตอนนี้ได้รับการบันทึกอย่างเป็นทางการในnetwork connect
:
แม้ว่าลิงก์จะให้การแก้ปัญหาชื่อส่วนตัวที่แปลเป็นภาษาท้องถิ่นภายในคอนเทนเนอร์ แต่นามแฝงที่กำหนดขอบเขตเครือข่ายจะเป็นวิธีที่คอนเทนเนอร์อื่นจะถูกค้นพบโดยชื่ออื่นโดยคอนเทนเนอร์อื่น ๆ ภายในขอบเขตของเครือข่ายเฉพาะ
ไม่เหมือนกับนามแฝงของลิงก์ซึ่งกำหนดโดยผู้บริโภคของบริการนามแฝงที่กำหนดขอบเขตเครือข่ายถูกกำหนดโดยคอนเทนเนอร์ที่เสนอบริการให้กับเครือข่าย
ดำเนินการต่อด้วยตัวอย่างข้างต้นสร้างคอนเทนเนอร์อื่นisolated_nw
ด้วยนามแฝงเครือข่าย
$ docker run --net=isolated_nw -itd --name=container6 -alias app busybox
8ebe6767c1e0361f27433090060b33200aac054a68476c3be87ef4005eb1df17
--alias=[]
เพิ่มนามแฝงที่กำหนดขอบเขตเครือข่ายสำหรับคอนเทนเนอร์
คุณสามารถใช้--link
ตัวเลือกเพื่อเชื่อมโยงคอนเทนเนอร์อื่นกับนามแฝงที่ต้องการ
คุณสามารถหยุดชั่วคราวรีสตาร์ทและหยุดคอนเทนเนอร์ที่เชื่อมต่อกับเครือข่ายได้ คอนเทนเนอร์ที่หยุดชั่วคราวยังคงเชื่อมต่ออยู่และสามารถเปิดเผยได้โดยการตรวจสอบเครือข่าย เมื่อคอนเทนเนอร์หยุดทำงานคอนเทนเนอร์จะไม่ปรากฏบนเครือข่ายจนกว่าคุณจะรีสตาร์ท
หากระบุไว้ที่อยู่ IP ของคอนเทนเนอร์จะถูกนำไปใช้ใหม่เมื่อรีสตาร์ทคอนเทนเนอร์ที่หยุดทำงาน หากไม่มีที่อยู่ IP อีกต่อไปคอนเทนเนอร์จะไม่สามารถเริ่มทำงานได้
วิธีหนึ่งในการรับประกันว่าที่อยู่ IP พร้อมใช้งานคือการระบุ--ip-range
เมื่อสร้างเครือข่ายและเลือกที่อยู่ IP แบบคงที่จากนอกช่วงนั้น เพื่อให้แน่ใจว่าที่อยู่ IP จะไม่ถูกกำหนดให้กับคอนเทนเนอร์อื่นในขณะที่คอนเทนเนอร์นี้ไม่ได้อยู่บนเครือข่าย
$ docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 multi-host-network
$ docker network connect --ip 172.20.128.2 multi-host-network container2
$ docker network connect --link container1:c1 multi-host-network container2