ฉันกำลังพยายามทำให้คอนเทนเนอร์สองคอนเทนเนอร์สื่อสารกันบนเซิร์ฟเวอร์เหมือนกับว่ากำลังทำงานบนเครื่องของฉัน
ประเด็นคือพวกเขาไม่สามารถสื่อสารได้ (พยายาม ping คอนเทนเนอร์ B จากคอนเทนเนอร์ A)
ก่อนอื่นฉันสร้าง Dockerfile ซึ่งใช้อิมเมจหลาม โปรดทราบว่าฉันใช้ --เครือข่าย=โฮสต์
ตัวเลือกในการสร้างคอนเทนเนอร์นี้ (โดยที่ฉันไม่สามารถรับแพ็คเกจบนอินเทอร์เน็ตได้)
ต่อไปฉันมี นักเทียบท่าเขียน
ไฟล์ซึ่งกำลังสร้างสองคอนเทนเนอร์โดยใช้อิมเมจที่สร้างไว้ก่อนหน้านี้
ขอบเขตไดรเวอร์ชื่อรหัสเครือข่าย
939d3e6af24e บริดจ์ บริดจ์ โลคอล
2d455afde6fc dcoflask_default บริดจ์ในเครื่อง
97f17b13840c โฮสต์โฮสต์โลคัล
0f40cabe1c02 ไม่มีค่าว่างในเครื่อง
โดยตรวจสอบเครือข่ายที่แนบคอนเทนเนอร์ 2 รายการของฉัน:
"คอนเทนเนอร์": {
"2fe15640751ac7f6dd7bfa20e2e646e44cc2c53fbfa25e8f4df25dfbc08adb9f": {
"ชื่อ": "mssql",
"EndpointID": "39d1a5429f676d990c52932eed8a66376f76b9cbbff9bcd53b256e1720798bfd",
"ที่อยู่ Mac": "02:42:ac:12:00:02",
"ที่อยู่ IPv4": "172.18.0.2/16",
"ที่อยู่ IPv6": ""
},
"50fc9a1f4a4743f2a4e9f80cd2d73515bad4fed748360fc4a26f289c06f8b245": {
"ชื่อ": "web-dco",
"EndpointID": "7d389570b1c80fa7a1fbb4a633dabbb4f7afd0063acb6cd41f12fc56a290650c",
"ที่อยู่ Mac": "02:42:ac:12:00:03",
"ที่อยู่ IPv4": "172.18.0.3/16",
"ที่อยู่ IPv6": ""
}
},
เราสามารถยืนยันได้ว่าพวกเขาอยู่ในอินเทอร์เฟซเครือข่ายเดียวกัน
ด้วยการออก ping (จากคอนเทนเนอร์ web-dco) ฉันไม่สามารถรับการตอบกลับจากคอนเทนเนอร์อื่น (mssql)
PING mssql (172.18.0.2) 56(84) ไบต์ของข้อมูล
^ซี
--- สถิติ ping mssql ---
ส่งแพ็กเก็ต 6 แพ็กเก็ต ได้รับ 0 แพ็กเก็ต สูญเสียแพ็กเก็ต 100% เวลา 125 มิลลิวินาที
ด้วยการดมกลิ่นเล็กน้อยบนอินเทอร์เฟซเครือข่ายที่สร้างขึ้นสำหรับเครือข่ายคอนเทนเนอร์ ฉันเห็นคำขอแต่ไม่มีการตอบกลับ:
legrand.g@my-server:~$ sudo tshark -i br-2d455afde6fc
ป้อนรหัสผ่านสำหรับ MFA แบบโต้ตอบ หรือป้อนรหัสผ่านตามด้วยรหัส PingID 6 หลัก:
ทำงานในฐานะผู้ใช้ "รูท" และกลุ่ม "รูท" นี่อาจเป็นอันตรายได้
กำลังจับภาพ "br-2d455afde6fc"
1 0.000000000 172.18.0.2 â 143.26.128.29 DNS 85 แบบสอบถามมาตรฐาน 0x54a6 A vortex.data.microsoft.com
2 4.001179175 172.18.0.2 â 192.44.120.10 DNS 85 แบบสอบถามมาตรฐาน 0x54a6 A vortex.data.microsoft.com
3 4.088081213 02:42:ac:12:00:02 â 02:42:40:e2:2c:15 ARP 42 ใครมี 172.18.0.1? บอก 172.18.0.2
4 4.088130713 02:42:40:e2:2c:15 â 02:42:ac:12:00:02 ARP 42 172.18.0.1 เวลา 02:42:40:e2:2c:15
5 5.003686924 172.18.0.2 â 143.26.128.29 DNS 85 แบบสอบถามมาตรฐาน 0x54a6 A vortex.data.microsoft.com
6 9.004492793 172.18.0.2 â 192.44.120.10 DNS 85 แบบสอบถามมาตรฐาน 0x54a6 vortex.data.microsoft.com
จับแพ็กเก็ต ^C6
สุดท้าย จากโพสต์ก่อนหน้านี้เกี่ยวกับการสื่อสารคอนเทนเนอร์ ฉันไม่เห็นสิ่งผิดปกติใน iptables
-P อินพุตยอมรับ
-P ยอมรับไปข้างหน้า
-P เอาต์พุตยอมรับ
-N นักเทียบท่า
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N นักเทียบท่า-ผู้ใช้
-อินพุต -p tcp -m tcp --dport 22 -j ยอมรับ
-A ไปข้างหน้า -j นักเทียบท่า-ผู้ใช้
-A ส่งต่อ -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o br-2d455afde6fc -m conntrack --ctstate ที่เกี่ยวข้อง ก่อตั้ง -j ยอมรับ
-A ไปข้างหน้า -o br-2d455afde6fc -j นักเทียบท่า
-ไปข้างหน้า -i br-2d455afde6fc ! -o br-2d455afde6fc -j ยอมรับ
-A ไปข้างหน้า -i br-2d455afde6fc -o br-2d455afde6fc -j ยอมรับ
-A FORWARD -o docker0 -m conntrack --ctstate ที่เกี่ยวข้อง ก่อตั้ง -j ยอมรับ
-A ไปข้างหน้า -o นักเทียบท่า 0 -j นักเทียบท่า
-A ไปข้างหน้า -i docker0 ! -o นักเทียบท่า 0 -j ยอมรับ
-A ไปข้างหน้า -i docker0 -o docker0 -j ยอมรับ
-A OUTPUT -p tcp -m tcp --sport 22 -j ยอมรับ
-นักเทียบท่า -d 172.18.0.2/32 ! -i br-2d455afde6fc -o br-2d455afde6fc -p tcp -m tcp --dport 1433 -j ยอมรับ
-นักเทียบท่า -d 172.18.0.3/32 ! -i br-2d455afde6fc -o br-2d455afde6fc -p tcp -m tcp --dport 5000 -j ยอมรับ
-A DOCKER-ISOLATION-STAGE-1 -i br-2d455afde6fc ! -o br-2d455afde6fc -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j ผลตอบแทน
-A DOCKER-ISOLATION-STAGE-2 -o br-2d455afde6fc -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j ผลตอบแทน
-A นักเทียบท่า-ผู้ใช้ -j ผลตอบแทน
ข้อแตกต่างเพียงอย่างเดียวที่ฉันเห็นได้ระหว่างการรันคอนเทนเนอร์เหล่านี้บนเครื่องของฉันและบนเซิร์ฟเวอร์คือ บนเครื่องของฉัน ฉันไม่จำเป็นต้องสร้าง Dockerfile ด้วย --เครือข่าย=โฮสต์
ตัวเลือก.
อินเทอร์เน็ตไม่สามารถเข้าถึงได้เช่นกัน แต่นี่เป็นอีกส่วนหนึ่งของปัญหา ฉันต้องการทำความเข้าใจก่อนว่าเหตุใดคอนเทนเนอร์ธรรมดาสองคอนเทนเนอร์จึงไม่สามารถสื่อสารได้แม้ว่าพวกเขาจะใช้เครือข่ายเดียวกันก็ตาม
เปิดใช้งานการส่งต่อ NB IP:
sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1