首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在CentOS 8上没有与Docker容器的网络连接

在CentOS 8上没有与Docker容器的网络连接
EN

Server Fault用户
提问于 2019-10-11 19:19:41
回答 3查看 37.9K关注 0票数 30

我刚刚在docker-ce上安装了最新版本的CentOS,但我无法从邻近的服务器访问已发布的端口,也无法从容器本身到达外部。

运行一个普通的普通CentOS 8,启用NetworkManager和FirewallD。默认防火墙区域是public

版本:

  • docker-ce 19.03.3 (官方码头管理人员)
  • containerd.io 1.2.6 ( CentOS 7的官方码头RPM - CentOS 8尚未提供)
  • CentOS 8.0.1905 (最小安装)
EN

回答 3

Server Fault用户

回答已采纳

发布于 2019-10-11 19:19:41

在花了几天时间查看涉及到的组件的日志和配置之后,我准备认输,然后返回到Fedora 30,在那里,这似乎是开箱即用的。

专注于防火墙,我意识到禁用firewalld似乎能起作用,但我不想这么做。在使用iptables检查网络规则时,我意识到切换到nftables意味着iptables现在是一个抽象层,只显示了nftables规则的一小部分。这意味着大部分--如果不是全部-- firewalld配置将应用在iptables范围之外。

我曾经能够在iptables中找到全部真相,所以这需要一些习惯。

长话短说--要想让这件事奏效,我必须要伪装。看起来dockerd已经通过iptables实现了这一点,但显然需要为防火墙区域启用此功能,以使iptables伪装才能工作:

代码语言:javascript
运行
复制
# Masquerading allows for docker ingress and egress (this is the juicy bit)
firewall-cmd --zone=public --add-masquerade --permanent

# Specifically allow incoming traffic on port 80/443 (nothing new here)
firewall-cmd --zone=public --add-port=80/tcp
firewall-cmd --zone=public --add-port=443/tcp

# Reload firewall to apply permanent rules
firewall-cmd --reload

重新启动或重新启动dockerd,入口和出口都应该工作。

票数 62
EN

Server Fault用户

发布于 2019-12-07 11:17:03

之前的答案所缺少的是,您首先需要将您的坞接口添加到您配置的区域,例如公共区域(或者将其添加到建议为这里的“受信任”区域,但从安全性的角度来看,我怀疑这是明智的)。因为在默认情况下,它没有分配给一个区域。还记得重新加载码头守护进程时,完成。

代码语言:javascript
运行
复制
# Check what interface docker is using, e.g. 'docker0'
ip link show

# Check available firewalld zones, e.g. 'public'
sudo firewall-cmd --get-active-zones

# Check what zone the docker interface it bound to, most likely 'no zone' yet
sudo firewall-cmd --get-zone-of-interface=docker0

# So add the 'docker0' interface to the 'public' zone. Changes will be visible only after firewalld reload
sudo nmcli connection modify docker0 connection.zone public

# Masquerading allows for docker ingress and egress (this is the juicy bit)
sudo firewall-cmd --zone=public --add-masquerade --permanent
# Optional open required incomming ports (wasn't required in my tests)
# sudo firewall-cmd --zone=public --add-port=443/tcp
# Reload firewalld
sudo firewall-cmd --reload
# Reload dockerd
sudo systemctl restart docker

# Test ping and DNS works:
docker run busybox ping -c 1 172.16.0.1
docker run busybox cat /etc/resolv.conf
docker run busybox ping -c 1 yourhost.local
票数 13
EN

Server Fault用户

发布于 2019-11-20 17:19:45

我再次将FirewallBackend变量更改为iptable,它对我有用。

使用此更新,nftable过滤子系统是firewalld守护进程的默认防火墙后端。若要更改后端,请在/etc/firewalld.conf文件中使用FirewallBackend选项。

链接:Centos8被否决_功能

关于这种行为的改变,我没有太多的信息。Docker尝试使用的一些iptables规则不符合CentOS8日志:

警告: COMMAND_FAILED:'/usr/sbin/iptables -w10 -D FORWARD -i docker0 -o docker0 -j DROP‘失败: iptables:坏规则(该链中存在匹配规则吗?)

票数 4
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/987686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档