Replies: 1 comment 1 reply
-
问题很可能与 firewalld 的配置有关。默认情况下,firewalld 可能没有为 Docker 容器的网络流量添加必要的规则,导致即使端口已暴露,外部依然无法访问。 以下是导致该问题的可能原因和解决办法: 可能原因 1:firewalld 的默认规则阻止了 Docker 流量 firewalld 默认规则可能禁止了 Docker 容器的网络流量,即便 Docker 暴露了端口,流量被防火墙拦截。 解决方法:
查看 Docker 默认使用的桥接网络(通常是 docker0),并允许其流量:
这会将 Docker 的网络接口 docker0 加入到受信任区域,允许所有流量。
如果你只想开放某些特定的端口,可以手动添加规则,例如:
可能原因 2:Docker 与 firewalld 的规则冲突 Docker 在启动时会尝试自动添加防火墙规则,但在某些系统中,firewalld 会覆盖或移除这些规则,导致外部流量被拦截。 解决方法:
有时 Docker 的规则会在服务启动时被 firewalld 替换,可以通过以下步骤修复:
确保 Docker 没有禁用 iptables 规则。如果 /etc/docker/daemon.json 文件中包含以下内容:
则需要将其修改为:
然后重启 Docker 服务:
可能原因 3:firewalld 的区域配置有问题 Docker 的默认规则可能被分配到错误的防火墙区域,例如 public,而不是 trusted。 解决方法: 检查 docker0 接口分配的区域:
如果发现 docker0 没有被分配到 trusted 区域,可以手动调整:
其他检查项
在启动容器时,确保使用了 -p 或 --publish 参数暴露端口,例如:
确保主机端口和容器端口正确对应。
查看防火墙日志中是否有与 Docker 流量相关的拦截记录:
如果以上方法都未解决问题,可以进一步测试是否存在其他安全软件(例如 SELinux)干扰,或考虑为 Docker 设置自定义网络配置文件。 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Contact Information
1Panel Version
1.10.23-lts
Problem Description
在centos stream 10上安装1panel,firewalld和iptables均启用,firewalld已放开所需的外部访问端口。
新安装的docker容器应用,无论是否勾选允许外部访问,容器端口无论是暴露到0.0.0.0还是网卡地址,均无法实现外部访问。关闭或卸载firewalld后可成功访问
Steps to Reproduce
创建一个容器应用,如wordpress,将其内部80端口暴露到0.0.0.0:10001或eth0 10.0.1.2:10001上。
在系统→防火墙中新建规则,放行10001端口,允许所有IP访问。
使用浏览器访问http://ip:10001
The expected correct result
预期结果:成功访问WordPress
实际结果:address unreachable
在系统→防火墙中停用firewalld,则可以正常访问
Related log output
Additional Information
之前的版本从没遇到过,疑似是最新版1.10.23lts特有的问题
Beta Was this translation helpful? Give feedback.
All reactions