Docker第一讲 Docker容器间/容器与宿主机ping不通解决

容器之间通信的主要方式

  • 通过容器ip访问

容器重启后,ip会发生变化。通过容器ip访问不是一个好的方案。

  • 通过宿主机的ip:port访问

通过宿主机的ip:port访问,只能依靠监听在暴露出的端口的进程来进行有限的通信。

  • 通过link建立连接(官方不推荐使用)

运行容器时,指定参数link,使得源容器与被链接的容器可以进行相互通信,并且接受的容器可以获得源容器的一些数据,比如:环境变量。

# 源容器
docker run -itd --name container -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#被链接容器 
docker run -itd --name container --link test-mysql:mysql  centos /bin/bash
#进入容器
docker exec -it container /bin/bash
  • 通过 User-defined networks(推荐)

docker network来创建一个桥接网络,在docker run的时候将容器指定到新创建的桥接网络中,这样同一桥接网络中的容器就可以通过互相访问。

docker run -it --network network --network-alias mysql  -e MYSQL_ROOT_PASSWORD=123 mysql:5.7

启动被链接的容器

 docker run -it --network test-network --network-alias centos  centos /bin/bash

Docker宿主机与容器通信

首先是关于防火墙的问题,可以查看本地自己的防火墙配置,可以关闭防火墙继续下部操作

对于宿主机与容器无法通信的,因为默认的容器网络是采用bridge的桥接形式,会在容器内部开辟自己的网段,所以,你接下来需要用到的几个命令如下:

ifconfig
查看下你本地的docker网络配置
docker network inspect [你容器挂载的network]
查看你的容器网络分段ip地址
route -n 
查看你的本地容器地址

查看下你本地network网络是不是与我的一致,如果你想修改你本地network网段,可以做下面操作

"default-address-pools" : [
    {
      "base" : "192.168.1.0/8",
      "size" : 24
    }
  ]

指定你的网段192.168.1.0/8,size:24,本地就会设置192.0.0.1的docker网段,记住修改后需要重新启动docker

systemctl restart docker

你可以将之前的network删除,本地重新创建一个network再次查看你创建的network的网段地址,就会发生变化,关于Network网络配置你可以参考这篇博客: Docker第四讲 Docker network网络模式讲解

如果你有遇到其他的什么问题,欢迎留言

如果本文档无法帮助到你,可以参考这篇博客:

docker容器ping不通宿主机与外网问题排查及解决

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员路同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值