在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