-
通过容器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
首先是关于防火墙的问题,可以查看本地自己的防火墙配置,可以关闭防火墙继续下部操作
对于宿主机与容器无法通信的,因为默认的容器网络是采用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网络模式讲解
如果你有遇到其他的什么问题,欢迎留言
如果本文档无法帮助到你,可以参考这篇博客:
原文链接:https://blog.csdn.net/huanglu0314/article/details/129685114?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171836840916800197020748%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171836840916800197020748&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-8-129685114-null-null.nonecase&utm_term=docker%E3%80%81%E5%A5%BD%E7%94%A8