docker容器访问不了宿主机和外部内网服务器
首先需要明确docker的网桥模式,网桥工作在二层(OSI堆栈),是通用网络设备的一种,可以设置IP地址。有了IP地址,Linux便可通过路由表或IP表,在网络层定位网桥,这就相当于有了一个虚拟网卡,即docker0。docker0默认的地址划分:IP(127.17.42.1/16),在启动容器时,docker会在宿主机上创建一对虚拟网卡veth pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备,容器启动时,Docker引擎将veth pair设备的一端放在新创建的容器中,并命名为eth0。另一端放在宿主机中,以veth***这样类似的名字命名,并将这个网络设备加入到docker0网桥中,可以通过brctl show命令查看,从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。
问题:
优先尝试 如不行 再执行下面的: iptables -F && systemctl restart docker (如果iptables内容重要 优先备份或不清理)
解决方法: (没brctl命令 自行安装 yum -y install bridge-utils
)
1.删除原有配置
1.systemctl stop docker 2.ip link set dev docker0 down 3.brctl delbr docker0 3.iptables -t nat -F POSTROUTING
2.创建新网桥
1.brctl addbr docker0 2.ip addr add 172.17.10.1/24 dev docker0 3.ip link set dev docker0 up
3.修改docker配置,在/etc/docker/daemon.json中追加bip如下. 注意json的格式,bip前面需要有 ","
4.重启docker
systemctl restart docker
5. 修改了DNS后 需要重启docker服了 重新生成iptables 不然容器里也访问不了宿主机
参考:docker容器ping不通宿主机与外网问题排查及解决_Xiao阿的博客-CSDN博客_docker容器ping不通外网