หลังจากผ่านไปหลายชั่วโมงฉันก็สามารถแก้ปัญหาได้
MTU ของเครือข่ายบริดจ์ของนักเทียบท่าต้องตรงกับ MTU ของอะแดปเตอร์เครือข่ายของโฮสต์
ในกรณีของฉัน MTU ของ eth0 (โฮสต์) ถูกตั้งค่าเป็น 1450 ในขณะที่ MTU ของ docker0 ถูกตั้งค่าเป็น 1500
คุณสามารถเปลี่ยน MTU ได้ด้วยวิธีใดวิธีหนึ่ง
ในกรณีที่คุณไม่มี /etc/docker/daemon.json
เพียงสร้าง:
# /etc/docker/daemon.json
# ปรับ MTU ตามอะแดปเตอร์เครือข่ายโฮสต์
{
"mtu":1450
}
อย่าลืมรีสตาร์ท docker.service: systemctl รีสตาร์ท docker.service
รายละเอียดเพิ่มเติม:
หากคุณไม่ต้องการตรวจสอบการตั้งค่าให้ใช้ ไอพี
และเปรียบเทียบค่า mtu
$ ไอพี
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> **mtu 1450** สถานะ qdisc fq_codel กลุ่ม UP เริ่มต้น qlen 1,000
...
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> **mtu 1500** qdisc noqueue state เริ่มต้นกลุ่ม
...
โปรดทราบว่า docker0 ระบุ 1500 เสมอและเปลี่ยนค่าเฉพาะเมื่อคอนเทนเนอร์เชื่อมต่อกับเครือข่ายนั้น
$ ไอพี
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel สถานะกลุ่ม UP เริ่มต้น qlen 1,000
...
3: นักเทียบท่า 0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 สถานะ qdisc noqueue ค่าเริ่มต้นของกลุ่ม
...
17: vethe4b452f@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master docker0 สถานะเริ่มต้นของกลุ่ม UP
...
เครือข่ายที่กำหนดเอง
ฉันยังพยายามสร้างเครือข่ายที่กำหนดเองด้วยการกำหนด มทร
แทนการตั้งค่า มทร
ทาง /etc/docker/daemon.json
. สิ่งนี้ไม่ได้ผลและฉันไม่รู้ว่าทำไม
เครือข่ายนักเทียบท่าสร้าง --opt com.docker.network.mtu=1450 CustomMTU