默认情况下 docker 会在 iptables 里创建优先级比 firewalld 高的规则。使用 firewalld 创建的规则对 docker 的容器就不会产生作用。
在 docker 的启动配置中加入参数 --iptables=false 来禁止 docker 启动的时候创建 iptables 规则,这个问题就解决了。这时候出现了另一个问题,docker 容器之间不能互相访问了。
在 firewalld 里添加 masquerade
firewall-cmd --permanent --zone=public --add-masquerade
docker 容器之间可以进行通行了。可是又出现了另外一个问题:
现在有两个容器
mysql 里创建了 用户 a 只允许 ip 为 10.0.1.3 的访问者使用。另一个 用户 b 只允许 192.168.xxx.yyy (我的机子)的访问者使用
容器 B 里配置的 mysql host 地址是 10.0.1.2,原来使用是正常的,经过上面的操作后容器 B 连接 mysql 的时候报错了。查看日志发现 access deined 用户 a@'10.0.1.1'
于是我用客户端连接 用户 b 返回相似的错误 access deined 用户 b@'10.0.1.1'
我的电脑和容器 B 都通过网关的地址来访问容器 A 了
虽然说可以把 mysql 账户的 host 改为 % 或者 10.0.1.1 解决,可是这样的话网内任何人都有可能进行连接,而日志里无法区分访问者。
请问应该如何做呢?
我的目的是
1
julyclyde 2019-08-09 12:31:01 +08:00
加--iptables=false 是头痛医脚
建议直接取消基础防火墙规则; docker 使用 host 网络模式 |
2
ysoserious OP @julyclyde #1 我已经不用这个方法了,另外 host 模式会在容器内暴露所有主机的网络设备,不那么安全。我已经找到另外的方法解决这个问题了。感谢回复。
|