在这里插入图片描述本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。

Docker版本:2:1.13.1-96.gitb2f74b2.tl2

问题描述

网上对于这个问题的已有回答在这一个时间点看来都没什么意义。

启动容器的时候进行端口映射,不报任何错误,但是所有端口都映射失败,如下显示:
在这里插入图片描述

在容器内部执行tcpdump -i bond1 port 24761可以看到宿主机可以收到数据包,但是容器内部收不到。

问题解决

其实花了点时间才定位到容器网络上。
在这里插入图片描述
可以看到这台机器并没有使用默认的 Bridge 模式,而是 使用 host 模式,其实问题能定位到这已经快解决了。

执行docker inspect mydatabase_1 | grep Net可以看到容器的默认网络模式是“Bridge”,而且此时我也注意到容器内部只有一个回环网卡而没有虚拟网卡。

此时两个解决方案,一个是添加 docker0 网桥,步骤可以参考[1]。要么启动的时候指定容器网络模式为host,即添加--net=host

问题的关键在于以 Bridge 模式 docker run的时候没有检测到网桥竟然没有任何报错,就这样连虚拟网卡也没有就启动了,这样这容器有啥用2333。这看上去是一个不折不扣的bug,也不知道新版本有没有修改。

参考:

  1. 云计算核心技术Docker教程:配置 docker0 网桥和自定义网桥
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐