事情的经过大概是这样的
https://sanenthusiast.com/docker-and-firewalld-mess-in-centos-7/
有一个人说 With RHEL 7 / CentOS 7, firewalld was introduced to manage iptables. IMHO, firewalld is more suited for workstations than for server environments.
It is possible to go back to a more classic iptables setup. First, stop and mask the firewalld service:
https://stackoverflow.com/a/24827438/11805722
有一个人机翻的官网docker关于firewalld的部分,最新版的docker文档已经找不到这段描述了
FirewallD
CentOS-7 中介绍了 firewalld,firewall的底层是使用iptables进行数据过滤,建立在iptables之上,这可能会与 Docker 产生冲突。
当 firewalld 启动或者重启的时候,将会从 iptables 中移除 DOCKER 的规则,从而影响了 Docker 的正常工作。
当你使用的是 Systemd 的时候, firewalld 会在 Docker 之前启动,但是如果你在 Docker 启动之后再启动 或者重启 firewalld ,你就需要重启 Docker 进程了。
https://www.widuu.com/docker/installation/centos.html
一个github上的讨论issue
https://github.com/moby/moby/issues/16137
最后发现原来是django需要通过局域网ip访问mysql,忘记在firewalld里开3306了
网友评论