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.
-
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