系统:RHEL 8.4 Docker 版本:20.10
RHEL 8 已从 iptables 迁移到 nftables,并且 Docker inbuild 使用 iptables 在计算机上设置防火墙规则。
它似乎中断了从 docker 容器到主机服务以及到同一网络上其他托管 docker 容器的通信。
我必须与端口 5000 上的容器中托管的注册表进行通信。
我还在容器中托管 impala 服务,并打开了以下暴露的端口
21000
21050
25000
25010
25020
此外,当我登录容器时,它无法连接到互联网。
有谁知道可以设置什么规则来与docker进行正确的通信。 此外,容器中托管的服务必须能够联系所有相关的主机服务。
到目前为止尝试过的事情:
在 /etc/docker/daemon.json 中进行了更改
{
"iptables" : false
}
并基于此链接尝试设置规则,但没有运气
仅供参考:我不知道如何在 Linux 防火墙中设置任何类型的规则(不使用 iptables 或 nftables)
从Docker 20.10开始,Docker提供了对firewalld的支持,无需手动添加任何规则。
它解决了我与 iptables 和 efatbles 相关的问题
就我而言,我有一条链挂在
forward
上,导致所有流量丢失,导致部分 docker 网络中断:
chain forward {
type filter hook forward priority 0; policy drop;
}
主机-容器和容器-主机流量仍然有效,因为它不经过转发链。
但是,容器到容器和容器世界的流量确实通过前向链,并且上述规则被丢弃。
假设没有特殊的 docker 网络设置(即默认网络上的所有容器),可以通过在上述链中添加以下内容来修复此问题:
chain forward {
type filter hook forward priority 0; policy drop;
# Allow outgoing traffic, initiated by docker containers
# This includes container-container and container-world traffic
# (assuming interface name is docker0)
iifname "docker0" accept
# Allow incoming traffic from established connections
# This includes container-world traffic
ct state vmap { established: accept, related: accept, invalid: drop }
}