Docker容器启动默认使用bridge的网络,容器之间不能ping通??

经查阅 - 事实证明,它只是不允许"ping 容器名"这种方式。做个记录—

菜鸟教程是新建network,并使用"ping 容器名"的,所以就经常性的使用这种方式 > ping 容器名。
菜鸟教程,容器连接

官方解释:

Containers on the default bridge network can only access each other by IP addresses, unless you use the --link option, which is considered legacy. On a user-defined bridge network, containers can resolve each other by name or alias.

大概意思就是:默认的bridge network 只能通过ip的方式连接,除了…你可以使用–link选项。或者在自己定义的network上 才可以通过名字 命名的方式。官方地址:https://docs.docker.com/network/bridge/#differences-between-user-defined-bridges-and-the-default-bridge

使用ping ip的方式,先查看分配的ip。

docker network inspect bridge

这里就不尝试使用–link了,所以使用默认的network其实它也是互通的。

这里,可以新建自定义network,容器并使用该network,即可以使用"ping 容器名",这种方式了。

docker network ls

docker network create -d bridge net-connection

-d 采用哪种方式 bridge桥接,net-connection是自定义名字

在启动容器的时候,加上 --network net-connection, 即可

docker run -it --name test --network net-connection ubuntu:latest

安装 ping工具,bash: ping: command not found

apt install iputils-ping,发现报错

root@40ad4be4293d:/# ping 192.168.17.51
bash: ping: command not found
root@40ad4be4293d:/# apt install iputils-ping
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package iputils-ping

报错,执行更新apt-get update

root@40ad4be4293d:/# apt-get update
Get:1 http://deb.debian.org/debian buster InRelease [121 kB]
Get:2 http://deb.debian.org/debian buster-updates InRelease [51.9 kB]                                       
Get:3 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB]                 
Get:4 http://deb.debian.org/debian buster/main amd64 Packages [7907 kB]            
Get:5 http://security.debian.org/debian-security buster/updates/main amd64 Packages [289 kB]
Get:6 http://deb.debian.org/debian buster-updates/main amd64 Packages [10.9 kB]                        
Get:7 http://repo.mysql.com/apt/debian buster InRelease [21.5 kB]                             
Get:8 http://repo.mysql.com/apt/debian buster/mysql-8.0 amd64 Packages [6017 B]          Fetched 8473 kB in 9s (933 kB/s)                  
Reading package lists... Done
root@40ad4be4293d:/# 

再重新安装

apt install iputils-ping

安装完后,即可以使用ping啦

### Docker容器网络连接故障解决方案 当遇到Docker容器内部网络无法正常信的情况时,可以从以下几个方面排查并解决问题: #### 1. 检查防火墙和Iptables规则 如果在启动Docker容器时出现了`iptables failed: iptables --wait -t nat -A DOCKER ...`类似的错误,则可能是由于系统的Iptables规则未正确加载或存在冲突所致。可以过重新初始化Docker的Iptables规则来修复此问题[^1]。 ```bash sudo service docker stop sudo iptables -F sudo iptables -t nat -F sudo systemctl start docker.service ``` 以上命令会停止Docker服务,清空现有的Iptables规则,并重新启动Docker服务以应用新的规则集。 --- #### 2. 自定义Docker网络 默认情况下,Docker使用桥接网络模式(bridge mode),可能会与其他已存在的网络发生IP地址冲突。为了避免此类问题,建议创建自定义Docker网络,并为容器分配特定的子网范围[^2]。 以下是创建自定义网络的具体方法: ```bash docker network create \ --subnet=192.168.1.0/24 \ my_custom_network ``` 之后,在运行新容器时指定该网络: ```bash docker run --network=my_custom_network ... ``` 这样可以有效减少因IP地址重复而导致的网络性问题。 --- #### 3. 验证宿主机与容器之间网络配置 有时,Docker容器内的网络异常可能源于其与宿主机之间网络设置的不匹配。例如,某些端口被占用或者路由表存在问题。此时应按照以下步骤逐一验证[^3]: - **检查Docker守护进程的日志** 使用`journalctl -u docker.service`查看是否有任何关于网络失败的信息。 - **确认Docker服务的状态** 执行`systemctl status docker.service`确保Docker正在稳定运行。 - **测试容器间的互访能力** 如果有多个容器需要相互信,尝试从一个容器ping另一个容器字或IP地址,观察是否成功。 完成这些操作后记得重启Docker服务使更改生效: ```bash systemctl restart docker.service ``` --- #### 4. 利用工具监控Docker容器网络状况 为了更直观了解当前各容器间以及它们对外部世界的实际联网情况,推荐采用专门设计用来分析Docker网络行为的第三方插件[^4]。比如执行如下指令获取最繁忙的三个容器详情: ```bash docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ --pid=host --net=host --privileged \ imike/check-docker-connection -n 3 ``` 上述脚本可以帮助快速定位哪些容器消耗了大量的带宽资源或者其他潜在瓶颈所在位置。 --- #### 总结 综上所述,针对Docker容器内部网络的问题,应该优先考虑调整防火墙策略、构建专属隔离型虚拟局域网、仔细审查基础架构层面的各项参数设定最后辅之以先进的诊断手段共同协作才能彻底根除隐患。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值