Sau nhiều giờ tôi đã có thể giải quyết vấn đề
MTU của mạng cầu nối của docker phải khớp với MTU của bộ điều hợp mạng của máy chủ
Trong trường hợp của tôi, MTU của eth0 (máy chủ) được đặt thành 1450 trong khi MTU của docker0 được đặt thành 1500
Bạn có thể thay đổi MTU bằng cách
Trong trường hợp bạn không có /etc/docker/daemon.json
chỉ cần tạo một:
# /etc/docker/daemon.json
# điều chỉnh MTU phù hợp với bộ điều hợp mạng máy chủ
{
"mtu":1450
}
Đừng quên khởi động lại docker.service: systemctl khởi động lại docker.service
Biết thêm chi tiết:
Nếu bạn không muốn kiểm tra cài đặt, hãy sử dụng ip
và so sánh giá trị mtu
$ip một
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> **mtu 1450** trạng thái qdisc fq_codel UP nhóm mặc định qlen 1000
...
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> **mtu 1500** trạng thái qdisc noqueue DOWN nhóm mặc định
...
Lưu ý rằng trạng thái docker0 luôn là 1500 và chỉ thay đổi giá trị nếu vùng chứa được kết nối với mạng đó
$ip một
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc trạng thái fq_codel UP nhóm mặc định qlen 1000
...
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 trạng thái qdisc noqueue UP nhóm mặc định
...
17: vethe4b452f@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master docker0 trạng thái Nhóm UP mặc định
...
Mạng tùy chỉnh
Tôi cũng đã cố gắng chỉ tạo một mạng tùy chỉnh với một MTU
thay vì thiết lập MTU
qua /etc/docker/daemon.json
. Điều này đã không làm việc và tôi không biết tại sao
tạo mạng docker --opt com.docker.network.mtu=1450 CustomMTU