[问题解决] docker run 端口映射失败且无报错
本作品采用知识共享署名-非商业性使用-相同方式共享 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,也不知道新版本有没有修改。
参考: