Centos8安装Docker后容器内无法访问网络

在Centos8中,默认的容器管理工具Podman被替换为Docker后,发现容器无法上网。原因是Docker未开启IP转发。解决方案包括:临时关闭firewalld和Docker服务,清除iptables规则,开启内核IP转发,通过firewalld设置masquerade以允许转发,并重启Docker服务。若防火墙屏蔽了icmp,可能影响Ping测试,可使用curl检查网络连接。
摘要由CSDN通过智能技术生成

Centos8安装Docker后容器内无法访问网络

Centos8安装Docker后容器内无法访问网络

在Centos8中,默认安装的的容器管理工具是使用了Podman,Podman的设计理念非常好,整合了pod思想,用户可以直接启动容器而不是像Docker那样通过守护进程启动,这样也会提高安全性。但是现在Podman国内使用的人数并不是很多,还会有一些问题出现。所以在Centos8上先将Podman替换为Docker。

在安装好Docker后,结果没有网络,经过排查发现是没有开启ip转发。正常情况下,Docker会自动开启地址转发。但是,不知道为什么Docker在Centos8中没有开启iptables的地址转发,需要我们使用firewalld防火墙管理工具来手动开启IP地址转发功能。

检查iptables

接下来会清除iptables现有规则,如果你一直使用的是firewalld来管理你的防火墙,就没必要查看现有的iptbales规则了。

iptabels -L

临时关闭firewallddocker服务

systemctl stop firewalld docker

清除现有防火墙规则

由于docker启动容器时会在iptables中添加规则,我们先把原来

先放行规则,非常重要!**

iptables -P INPUT ACCEPT

否则22端口也就是你的SSH服务可能再也连不上了。

清除所有规则
iptables -F

开启端口转发

1、开启内核IP地址转发功能

首先查看内核是否开启IP地址转发功能

cat /proc/sys/net/ipv4/ip_forward

返回为1已开启,返回0则需要手动开一下。

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 复制到终端上!以root用户身份执行。

sysctl -p 使更改立即生效。

2、防火墙放行IP地址转发

现在将firewalld服务启动

systemctl start firewalld

默认情况下firewalld会禁止转发流量,可以执行firewall-cmd --query-masquerade查看状态,应该是no,请执行下面的命令开启转发。


 firewall-cmd --add-masquerade --permanent 永久开启IP地址转发

 firewall-cmd --reload    重载防火墙规则,使之生效

启动Docker服务

现在可以启动docker服务检查容器网络是否正常。

systemctl start docker
docker run -it --rm centos:latest ping baidu.com

额外要注意的一点是,如果你防火墙屏蔽了icmpecho-request请求,也就是我们说的禁止Ping。那么在容器中Ping别人及其的时候也会被主机防火墙拦截下来,Ping不通的哦。如果Ping不通可以使用curl www.baidu.com看看能不能访问得到百度页面,这样检测。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值