เชื่อมต่อคอนเทนเนอร์ Docker กับทั้งโฮสต์และเครือข่ายบริดจ์ภายใน


14

ฉันกำลังพยายามที่จะใช้ภาชนะหางเป็นเราเตอร์ระหว่างเอกชน (ก--internal) เครือข่ายนักเทียบท่าและกำหนดไว้ล่วงหน้าhostเครือข่าย ซึ่งหมายความว่าคอนเทนเนอร์จำเป็นต้องมีอินเทอร์เฟซเครือข่ายสองอินเทอร์เฟซ "นอก" หนึ่งที่สามารถเข้าถึงที่อยู่ IP โฮสต์ทั้งหมดและอินเทอร์เฟซ "ภายใน" หนึ่งที่ทำหน้าที่เป็นเกตเวย์สำหรับคอนเทนเนอร์ในเครือข่าย Docker ภายใน

คอนเทนเนอร์ของเราเตอร์นั้นจะ NAT เครือข่ายทราฟฟิกจาก / ไปยังคอนเทนเนอร์

ฉันไม่พบวิธีกำหนดค่า Docker ให้เรียกใช้คอนเทนเนอร์ด้วยอินเทอร์เฟซทั้งสองนั้น ที่ใกล้เคียงที่สุดที่ฉันจะได้รับคือมีbridgeอินเทอร์เฟซสองชุดซึ่งไม่ตรงกับที่ฉันต้องการ

การพยายามเชื่อมต่อด้วยตนเองทำให้เกิดข้อผิดพลาด:

# docker network connect host root_router_1
Error response from daemon: Container cannot be disconnected from host network or connected to host network

ทุกคนสามารถแสดงให้ฉันเห็นว่าจะบรรลุสิ่งนี้ได้อย่างไรโดยเฉพาะอย่างยิ่งแม้เมื่อนักเทียบท่าเขียนข้อความ?


@PunMum น่าเสียดายที่ไม่ใช่ เราสิ้นสุดการเชื่อมต่อคอนเทนเนอร์ทั้งหมดโดยตรงกับเครือข่ายโฮสต์และการกำหนดค่า IP ภายในคอนเทนเนอร์
Hexaholic

คำตอบ:


2

ตามคำถามและคำตอบเกี่ยวกับ GitHub :

เครือข่ายโฮสต์นั้นพิเศษ คุณต้องใช้ network_mode: host บนบริการ


network_modeไม่ทำงานถ้าคุณต้องการสิ่งที่เชื่อมต่อกับเครือข่ายภายในและเครือข่ายโฮสต์ ดูเหมือนบ้าที่เราไม่สามารถหาทางออกที่ชัดเจนในการแก้ไขปัญหานี้
jv-dev

2

นักเทียบท่าไม่อนุญาตให้เชื่อมต่อคอนเทนเนอร์กับเครือข่ายโฮสต์และเครือข่ายสะพานเชื่อมต่ออื่น ๆ ในเวลาเดียวกัน ฉันจะพยายามอธิบายเหตุผลด้วยตัวอย่าง:

  • ให้เรานึกถึงคอนเทนเนอร์ C1 สมมุติฐาน C1 จะเชื่อมต่อกับเครือข่ายโฮสต์ (--net = host) และเครือข่ายบริดจ์ Docker Br1 (--net = Br1)
  • คอนเทนเนอร์ที่สองให้เราบอกว่า C2 เชื่อมต่อกับ Br1

ด้วยการตั้งค่าด้านบนการคาดเดาของฉันคือเครือข่ายโฮสต์สามารถมองเห็นได้จาก C2 และฉันคิดว่านี่คือเหตุผลที่ Docker ป้องกันเราโดยอัตโนมัติจากการไม่เปิดเผยเครือข่ายโฮสต์ไปยังภาชนะที่ไม่ได้ระบุโฮสต์

ที่ถูกกล่าวว่าถ้าเรามีชุดของภาชนะและเราต้องการให้พวกเขาทั้งหมดเชื่อมต่อกันด้วยเพียงภาชนะเดียวที่มีการเข้าถึงเครือข่ายโฮสต์วิธีการของฉันจะเป็น:

  • [C2, ... , CN] เชื่อมต่อกับ Docker bridge ที่ผู้ใช้กำหนด Br1 (--net = Br1)
  • C1 เชื่อมต่อกับเครือข่ายโฮสต์ (--net = host)
  • C1 exposes พอร์ตเพื่อให้สามารถเข้าถึงได้จากส่วนที่เหลือของคอนเทนเนอร์

แก้ไข: เรายังคงต้องปรับนโยบาย iptables ในลักษณะที่สามารถเข้าถึง C1 จากคอนเทนเนอร์ที่เหลือ (ดูhttps://docs.docker.com/network/iptables/ )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.