默认情况下 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 解决,可是这样的话网内任何人都有可能进行连接,而日志里无法区分访问者。
请问应该如何做呢?
我的目的是
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.