解决docker容器映射端口无法被外部访问的问题,如果你混合运用network=host与-p mapping要注意

196 阅读1分钟

在服务器上新跑了一个mysql容器,用-p将3306映射到宿主机的33306, 结果发现我从本地无法连接过去,排查了一下原因。

  1. 首先从服务器上telnet 33306, 没有问题, 换了一台机器再试,不行了 不过至少证明33306是开放的,问题不在容器里

  2. 怀疑防火墙,不过这台机器ufw是关的,也没有安装firewalld, 这锅甩不过去

  3. 搜索了下,说有个内核层的 ip4_packet_forwarding要设成1, 一看也确实是1, 没用

  4. 说要查docker network, 这个一开始忽略了, 后来感觉应该这里可以突破的

  5. 迷茫了一阵, 再跑了一个新容器,映射新端口也没有用,据同事说,在另一台机器上就没有这问题,为何?

  6. 忽然想到, 我在这个服务器上曾经跑过一个network=host的容器,这是否影响了现在这种-p mapping的方式? 正好看到网上有说关于重启docker及docker网卡docker0来解决某些端口访问不了问题的情况,我也试了下

service docker stop
ifconfig docker0 down
ifconfig # 查看下是否真down了
ifconfig docker0 up
service docker start

居然就解决了, 所以docker在混合network=host跟-p mapping的时候,有一些情况?