在docker容器中能ping www.baidu.com

但是curl www.baidu.com没有反应。

最终排查看到是mtu设置的问题。

MTU( Maximum Transmission Unit,最大传输单位),用来设置描述网络接口的最大传输量,需要注意的是,每个网络接口的MTU都不相同。如果网口的mtu与docker0 mtu不一致,就会导致容器内部能够ping,但是curl不通的情况。

如何解决?

将网口的mtu与docker0 mtu保持一致,一般都是1500

如何查看网络接口的MTU?
ifconfg命令,其中

如何修改网络接口的MTU?

因此你在Linux中使用ifconfig会看到有的接口会有1492bytes,
不过在以太网上,标准的定义就是1500bytes.
修改方法:

方法一:

ifconfig ens42f0np0 mtu 1500

优点:所有Linux发行版通用;
缺点:重启后失效。

方法二:

修改配置文件,永久有效

vi /etc/sysconfig/network-scritps/ens42f0np0

MTU=“1500” #增加这条命令,保存后重启网卡生效

service network restart

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐