docker容器无法连接外部网络的一种尝试和记录

作者:guopher
浏览:670

负责的项目在同事往测试环境中添加了一个 Oracle 容器后发现后台服务一个拉取第三方数据的接口一直超时,之前只是慢,但是这次重试了很多次都超时,所以去对应的容器中试着访问对应的接口发现 ping 不通了,所有对外的访问都失败了,但 docker 创建的 network 也一切正常,查看操作日志发现同事为了添加新容器停用了防火墙

systemctl stop firewalld

重启之后仍然无法访问外部的网络,无奈,尝试重启docker服务并重建几个容器的 network,发现 docker 重启失败报错
 

Failed to start Docker Application Container Engine.

结合 systemctl status docker 输出内容发现 iptables 不正常,于是重启

service iptables start

再次重启 docker 成功,然后重建网络,首先将该 network 内部的容器断开连接,network id 可通过 docker network ls 查询

docker network disconnect <network id> <container name>

删除并重建网络

docker network rm <network id>

docker network create --subnet=172.19.0.0/16 <network name>

将所有的容器重新连接至该网络中‘

docker network connect <network id> <container name>

搞定后进入容器再次访问对应第三方接口,数据能够正常拉取到,但是重启服务失败了,发现是服务重启时数据库连接失败,一顿查看配置,发现是数据库对应的 docker 容器的启动参数中为该容器在对应网络中指定了别名,大概如下

docker run --name <db name> --network <network name> --network-alias <alias name> ...

重复断开网络步骤,并在接入网络时指定对应的别名。

再次重启,一切都搞定收工,docker 建立网络还是受宿主机防火墙状态影响的,算是记住一个运维和开发坑点了




登录后回复

共有0条评论