我刚刚遇到这个问题,现在已经很晚了,所以我现在真的无法再正常思考了。但这仍然是一个相当简单的事情,所以我真的不知道我错过了什么,只是在这里发疯:
我正在设置一个仅用于运行 Docker 容器的服务器。我从一个 MariaDB 容器开始,这里一切正常,我决定连接到它,以确保一切正常。
所以现在我想连接到运行 MariaDB 的服务器,由于我位于 Firewalld 后面,我首先通过向 Firewall-cmd 添加新区域来配置它,添加服务和源:
firewall-cmd --permanent --new-zone=test-from-home
firewall-cmd --reload
firewall-cmd --permanent --zone=test-from-home --add-service=mysql
firewall-cmd --permanent --zone=test-from-home --add-source=XX.XX.XX.XX/32
firewall-cmd --reload
而且我使用mysql -u root -p -h host
All great!完美连接!
跑步firewall-cmd --get-active-zones
回报:
[root@nd01 latest]# firewall-cmd --get-active-zones
test-from-home
sources: XX.XX.XX.XX/32
public
interfaces: eth0
所以只是因为有时我记得进行这些测试以确保一切正常,我连接到另一台机器并从另一个 IP 成功连接。
firewall-cmd --zone=test-from-home --list-all
test-from-home (active)
target: default
icmp-block-inversion: no
interfaces:
sources: XX.XX.XX.XX/32
services: mysql
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
为什么我可以从随机机器连接?我错过了什么?谢谢
答案1
好吧,今天我找到了答案,
FirewallD 与 Docker 不兼容(反之亦然)
同时,我发现 FirewallD 和 Docker 不能协同工作。根据 Docker 文档,解决这个问题的方法是禁用 IPTables:-Docker 和 iptables
正如它从第一个立场所说的那样:
在 Linux 上,Docker 操纵
iptables
规则来提供网络隔离。这是一个实现细节,您不应修改 Docker 插入到您的iptables
策略中的规则。
由于有人建议不要这么做,因此这不会是我的第一选择。
所以我做了更多的挖掘,我找到了一个可以给我答案的页面,任何遇到这个问题的人都可以从中得到一些想法,这是一个很好的方法,通过向 DOCKER-USER 链添加配置。