Score:0

/etc/hosts ของโฮสต์ที่ส่งผลต่อการแก้ไข DNS ภายในคอนเทนเนอร์ Docker

ธง ru

ฉันกำลังทำงานในโครงการที่ฉันใช้คอนเทนเนอร์ 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)

ฉันเดาว่านี่เป็นพฤติกรรมที่ตั้งใจเป็นส่วนใหญ่ แต่ฉันไม่พบตัวเลือกมากมายในการควบคุมสิ่งนี้

  1. ฉันสามารถลบรายการในไฟล์ /etc/hosts ของโฮสต์ได้ ซึ่งในกรณีนี้ขึ้นอยู่กับเซิร์ฟเวอร์ DNS จริงที่จะแก้ไข FQDN ภายในคอนเทนเนอร์ แต่ยังรวมถึงโฮสต์ด้วย นอกจากนี้ ฉันไม่ได้เป็นคนใส่มันตั้งแต่แรก ผู้ให้บริการคลาวด์ของฉันทำผ่าน cloud-init ฉันเดาว่าไม่แน่ใจว่าด้วยเหตุผลอะไร

  2. ฉันสามารถเพิ่มรายการโฮสต์ที่ชัดเจนลงในแต่ละคอนเทนเนอร์ด้วย FQDN ชี้ไปที่ IP สาธารณะ หรืออาจเป็น IP ภายในของตัวจัดสรรภาระงาน หรือ IP ภายในของโฮสต์ ฟังดูเหมือนฝันร้ายที่ต้องรักษา

  3. ฉันไม่สามารถใช้บริการ DNS ของ Docker ได้ ซึ่งในกรณีนี้ ฉันจะสูญเสียความสามารถในการอ้างอิงคอนเทนเนอร์ที่เชื่อมโยงโดยใช้ชื่อภายในคอนเทนเนอร์ ซึ่งเป็นคุณลักษณะที่ยอดเยี่ยมจริงๆ ที่ฉันไม่ต้องการเสียไป

มีทางเลือกอื่นอีกไหม? ฉันพลาดอะไรไปรึเปล่า? นักเทียบท่าเวอร์ชัน 20.10.9 เขียนเวอร์ชัน 1.29.2 โฮสต์ Ubuntu 20.04

ป.ล. ไม่ การทดสอบ org ไม่ได้แก้ไขเป็น 127.0.0.1 จริง ๆ ก็ลองดู

ขอบคุณ.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา