排查原因是因为,在服务器上查看ifconfig,显示docker0的mtu是1500,网卡的mtu是1450。
mtu是指在网络通信中能够承载的最大数据包大小。一般情况下,docker的mtu默认为1500字节。
然而,不同的网络设备和网络配置可能会导致mtu大小不一致,这就会影响网络传输的性能。 当数据包的大小超过网卡的mtu时,就会发生数据包分片,这会增加网络传输的延迟和丢包的风险。
比如docekr0的mtu大于网卡的mtu,就会丢包,造成的结果就是能ping通外网,但是curl不通。
解决方式是把docker0的mtu改为1450。
准备测试镜像(留言领取)
docker run -it --rm --name nginx nginx:v2 sh
检查网卡的mtu值
检查docker容器的mtu值
设置docker0的mtu值为1450
分为两种修改方式,分别是docker容器和docker compose配置,看自己需求。
docker容器配置
1.使用编辑器打开 Docker Daemon 的配置文件:
vim /etc/docker/daemon.json
2.在配置文件中添加或修改 mtu 项,并设置为你想要的 MTU 值:
{
"mtu": 1450
}
docker compose配置
在docker-compose文件网络配置这一块,指定容器的mtu为1450
networks:
default:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: 1450
重启docker
systemctl restart docker