记一次linux Docker网络故障排除经历

背景:

  之前做了一个项目,需要在容器内访问宿主机提供的Redis 服务(这是一个比较常见的应用场景哈), 常规方案:

①   主机网络(docker run --network=host): 完全应用主机网络堆栈,在容器内localhost就是指向宿主机

②   网桥网络(docker run --network=bridge):  这也是docker容器默认的网络通信模式,容器内localhost 指向的是容器自身,不能使用 localhost 访问宿主机上localhost:6379承载的Redis服务 。

docker会默认建立docker0 网桥;

网桥有一个网关ip, 有一个子网段; 网桥内容器从子网段中确定容器ip( ip  addr eth0), 网桥内容器可通过 service name相互访问;

网桥内容器通过 docker0 Getway得以访问外网。

我们不做骚操作,肯定还是沿用常见的②网桥模式:

第一步:自定义网桥并应用该自定义网桥

docker network create --gateway 172.16.1.1 --subnet 172.16.1.0/24 app_bridge
docker run --network=app_bridge --name ......

# 以下截取自docker-compose.yml文件......
networks:
  default:
    name: app_bridge
    external: true

为啥不利用默认docker0网桥?

本文开头已讲: docker0 是默认网桥,新建的容器默认都会加入这个网桥,所以我们需要建立一个专属于本程序的网桥app_bridge

第二步:容器内建立 对应于宿主机的别名

为实现在容器内网桥模式访问宿主机localhost:6379 的服务, 必须搭配docker 提供的 --add-host 选项(对应到docker-compose.yml这个配置是extra_host)。

docker run 的--add-host 选项能在 容器 /etc/hosts 文件增加行记录,便于我们使用该名称访问其他网络。

 docker run -it --add-host dockerhost:172.16.1.1 ubuntu cat /etc/hosts
172.17.0.22     09d03f76bf2c
fe00::0         ip6-localnet
ff00::0         ip6-mcastprefix
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters
127.0.0.1       localhost
::1	            localhost ip6-localhost ip6-loopback
172.16.1.1      dockerhost

之后在程序的配置文件即可应用 dockerhost:6379 访问宿主机Redis服务。

------------------------------------------ 稍熟悉docker网络模型的朋友都能理所当然完全上述操作-----------------------------------------------------

一个状况:

  我在公司CentOS7机器上使用上述操作, 容器内一直无法连通宿主机(容器间还是能正常访问)。

简化问题测试:新建容器,在容器内尝试ping docker0 网关, 哔了狗了,4台公司机器都ping不通docker0网关,外网还是正常访问。

那这个问题就成了: 使用默认的docker0网桥,容器内无法ping通docker0网关,进而无法访问宿主机。

呀呀呀呀, 八成是公司机器的配置问题,好慌,我是一个linux 小白,我是一个linux 小白,我是一个linux 小白    ~。。~

追问了公司运维,发现:

Chain INPUT (policy DROP)

INPUT链的缺省策略是 丢弃,就是本机默认不接受任何连接,除非满足下面的INPUT 链策略。

这个策略的初衷是为了 服务器安全(尼玛, 导致容器访问宿主机的基础能力都没有了!!!)。

运维方案:

  • service iptables stop   关闭iptables
  • 把要使用的网桥网段加入 INPUT链

作为一个linux准小白,默默的 使用service iptables stop 关闭了公司设定的iptables.

OK, That‘s All, 以后若有朋友遇到 默认网桥容器内无法ping通网桥,无法访问宿主机,可参考本文排障。

原文地址:https://www.cnblogs.com/JulianHuang/p/11636825.html

时间: 2024-11-08 12:17:55

记一次linux Docker网络故障排除经历的相关文章

网络访问受限如何解决?记一次实验室的网络故障经历

从昨天下午开始,一直到今天上午,实验室出现了集体网络故障,现记录下来以供分享.具体表现形式如下. 实验室有一台路由器,有一半的网络端口是通过一个交换机连接到路由器的,剩下的一半直接连接到路由器上.所有的有线网络都出现了“受限”的标志,以太网或者WLAN标识上有黄色感叹号,无线网只有一台笔记本可以连上,其他的所有电脑无线网也无法连接,所有的手机设备更是无法连接上wifi. 现场如上所述,诊断流程如下:网络出现故障一般分为硬件故障和软件故障. 首先检查硬件故障,从客户端到路由器再到web服务器,如果

网络故障排除的五个简单步骤

长期从事IT工作的人会发现很多网络问题,其中一些问题很容易诊断和纠正,但有些问题很难弄明白.如果遇到这些问题时能够通过一些简单的步骤来排除网络故障,以收集信息并缩小问题的范围. 第1步:检查网络配置 故障排除过程可以通过验证你所了解的主机来实现.方法是在两台主机上运行IPCONFIG命令,以确保它们使用的IP地址都在预期范围内.虽然操作很基本,但是运行IPCONFIG命令会暴露出问题根源.例如,一个系统如果没有接收到IP地址,可能是因为DHCP范围已经耗尽. 单独运行IPCONFIG命令可以显示

Linux 网络故障排除命令

命令汇总 ping  检查当前主机是否和目标主机是否畅通 traceroute -w 1  主机超时只等待1次 mtr nslookup 域名解析成ip地址 telnet 检查端口是否畅通 tcpdump 抓包信息保存到文件: netstat  ss命令 原文地址:https://www.cnblogs.com/Brake/p/12240693.html

记一次KUBERNETES/DOCKER网络排障

昨天周二晚上,临下班的时候,用户给我们报了一个比较怪异的Kubernetes集群下的网络不能正常访问的问题,让我们帮助查看一下,我们从下午5点半左右一直跟进到晚上十点左右,在远程不能访问用户机器只能远程遥控用户的情况找到了的问题.这个问题比较有意思,我个人觉得其中的调查用到的的命令以及排障的一些方法可以分享一下,所以写下了这篇文章. 问题的症状 用户直接在微信里说,他们发现在Kuberbnetes下的某个pod被重启了几百次甚至上千次,于是开启调查这个pod,发现上面的服务时而能够访问,时而不能

一次误操作引起的linux系统网络故障

1.故障描述 接到用户报障,生产某系统无法访问.同事接到报障后立即排查,经测试,系统确实无法访问,并且无法ping通服务器. 2.故障处理 由于客户端无法ping通服务器,需要进入机房查看.经查看,服务器硬件无报警,系统无重启.登录系统使用ifconfig命令查看,IP丢失(eth0不存在),紧接打开网卡配置目录/etc/sysconfig/network-scripts,发现网卡文件ifcfg-eth0丢失,只存在之前备份的ifcfg-eth0.bak文件和ifcfg-peth0文件.根据先抢

linux系统安装及故障排除

GUI:安装 在安装时,连按两下Esc键 可以自己定制安装 boot:在提示符下可以提供一些配置信息,自定义如何启动安装过程 boot: linux ip=192.168.1.12 netmask=255.255.255.0 gateway=192.168.1.254 dns=192.168.1.254 ks=http://192.168.1.254/centos.x86_64.cfg 最后按回车 Linux的引导选项:即boot:提示符后可以使用的选项 Kickstart 资源 选项格式 DV

linux系统启动与故障排除

1.Linux系统启动过程的大致步骤与调用过程: 第一阶段:BIOS启动引导阶段,主要实现硬件的初始化以及查找启动介质,从MBR中装载启动引导管理器(GRUB)并运行该启动引导管理: 第二阶段:GRUB引导阶段,装载statge1,statge1.5,statge2,读取/boot/grub.conf文件并显示启动菜单,装载所选的kernel和initrd文件到内存中: 第三阶段:内核阶段,运行内核启动参数,解压initrd文件并挂载initrd文件系统,装载必须的驱动,挂载根文件系统: 第四阶

一次无线网络故障排除过程

接到客户电话,说是无线改了地址段就不好用了!这不可能啊!在电话中跟客户沟通得知,客户那里对原有网络进行改造,重新规划了IP地址,在WLC上将原有的192.168地址段取消,改用10.120的地址段了,改完之后客户端连上无线,能够从DHCP获取得到地址,也能PING通网关,可是就是上不了网. 为了验证这段IP地址没有问题,客户把交换机上的某一个端口划到了这个网段,接上网线,获取到了地址,打开网页,发现竟然能够上网!这是什么情况?有线获取该段地址可以上网,无线获取该段地址不能上网? 由于这个项目实在

内网网络故障排除步骤

1.    时间 1.1          2010.9 2.    背景 2.1          在日常的维护中,经常会有网络出现从网络信号开始到网络通信协议和内容有问题的各样的问题,这就要求我们对故障分析处理有一个合理的分析步骤 3.    处理方法 3.1          根据osi底三层可以基本解决网络所发生的故障 3.2          物理层:网卡或者pci插槽的问题,造成网卡act灯不亮,驱动没有装好. 3.3          数据链路层:客户端到交换机的网络问题,先用笔记