ฉันกำลังทำงานในโครงการที่ฉันใช้คอนเทนเนอร์ Nginx (โหลดบาลานเซอร์) หนึ่งรายการที่มีพอร์ต 80 และ 443 ที่เผยแพร่ไปยังโฮสต์ และคอนเทนเนอร์ Nginx ของแอปพลิเคชันอื่นๆ อีกสองสามตัวที่มีพอร์ตที่ไม่ได้เผยแพร่ ทั้งสามเป็นส่วนหนึ่งของเครือข่ายบริดจ์แบบกำหนดเองใน Docker และสามารถสื่อสารกันโดยใช้ชื่อคอนเทนเนอร์
ฉันเชื่อว่าสิ่งนี้เกิดขึ้นเนื่องจาก DNS ภายในของ Docker ที่ทำงานบน 127.0.0.11 อย่างไรก็ตาม สิ่งหนึ่งที่ฉันสังเกตเห็นคืออะไรก็ตามที่ฉันใส่ FQDN ลงใน /etc/hosts ของระบบโฮสต์และแก้ไขเป็น 127.0.0.1 (หรือ 127.0.1.1) มันทำให้คอนเทนเนอร์แก้ไข FQDN นี้เป็นที่อยู่ IP ในเครื่องด้วย .
ไม่เป็นไรสำหรับโหลดบาลานเซอร์ - มันจะมาถึงเอง นอกจากนี้ยังใช้ได้กับระบบโฮสต์ เนื่องจากพอร์ตของโหลดบาลานเซอร์ถูกเผยแพร่ไปยังระบบโฮสต์ แต่มันแตกในคอนเทนเนอร์ของแอปพลิเคชัน ซึ่ง FQDN ไม่สามารถเข้าถึงโหลดบาลานเซอร์ได้อีกต่อไป เนื่องจากมันกำลังแก้ไขให้ตัวเอง
นี่คือตัวอย่าง docker-compose.yaml ของฉัน:
รุ่น: "3.9"
บริการ:
ปอนด์:
รูปภาพ: "bitnami/nginx:latest"
แอป 1:
รูปภาพ: "bitnami/nginx:latest"
แอป 2:
รูปภาพ: "bitnami/nginx:latest"
โฮสต์ของฉัน / etc / hosts:
127.0.0.1 testing.org
จากนั้นภายในหนึ่งในคอนเทนเนอร์ของแอป:
# แมว /etc/resolv.conf
เนมเซิร์ฟเวอร์ 127.0.0.11
ไฟล์โฮสต์คอนเทนเนอร์:
# แมว / etc / โฮสต์
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-วนกลับ
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.23.0.2 67d3aaa71abb
และความละเอียด:
#ขุดtests.org
;; ส่วนคำตอบ:
การทดสอบ.org 0 ใน 127.0.0.1
;; เซิร์ฟเวอร์: 127.0.0.11#53(127.0.0.11)
ฉันเดาว่านี่เป็นพฤติกรรมที่ตั้งใจเป็นส่วนใหญ่ แต่ฉันไม่พบตัวเลือกมากมายในการควบคุมสิ่งนี้
ฉันสามารถลบรายการในไฟล์ /etc/hosts ของโฮสต์ได้ ซึ่งในกรณีนี้ขึ้นอยู่กับเซิร์ฟเวอร์ DNS จริงที่จะแก้ไข FQDN ภายในคอนเทนเนอร์ แต่ยังรวมถึงโฮสต์ด้วย นอกจากนี้ ฉันไม่ได้เป็นคนใส่มันตั้งแต่แรก ผู้ให้บริการคลาวด์ของฉันทำผ่าน cloud-init ฉันเดาว่าไม่แน่ใจว่าด้วยเหตุผลอะไร
ฉันสามารถเพิ่มรายการโฮสต์ที่ชัดเจนลงในแต่ละคอนเทนเนอร์ด้วย FQDN ชี้ไปที่ IP สาธารณะ หรืออาจเป็น IP ภายในของตัวจัดสรรภาระงาน หรือ IP ภายในของโฮสต์ ฟังดูเหมือนฝันร้ายที่ต้องรักษา
ฉันไม่สามารถใช้บริการ DNS ของ Docker ได้ ซึ่งในกรณีนี้ ฉันจะสูญเสียความสามารถในการอ้างอิงคอนเทนเนอร์ที่เชื่อมโยงโดยใช้ชื่อภายในคอนเทนเนอร์ ซึ่งเป็นคุณลักษณะที่ยอดเยี่ยมจริงๆ ที่ฉันไม่ต้องการเสียไป
มีทางเลือกอื่นอีกไหม? ฉันพลาดอะไรไปรึเปล่า? นักเทียบท่าเวอร์ชัน 20.10.9 เขียนเวอร์ชัน 1.29.2 โฮสต์ Ubuntu 20.04
ป.ล. ไม่ การทดสอบ org ไม่ได้แก้ไขเป็น 127.0.0.1 จริง ๆ ก็ลองดู
ขอบคุณ.