docker 容器共享网络
前言
我在自己的 linux 服务器装了两个 docker 服务 a 和 b。其中 a 服务是对外, b 服务是为了供 a 服务使用,所以我需要让两者的网络互通本地访问。下面是流程:
创建共享网络:
确保运行以下命令来创建名为 "share" 的 Docker 网络:
docker network create share
对于项目 A:
在项目 A 的 docker-compose.yml
文件中,添加以下内容以连接到名为 "share" 的网络:
version: '3'
services:
service_a:
image: your_image
ports:
- "18000:8000" # 将容器 A 的端口映射到主机的端口 18000
networks:
- share
networks:
share:
external: true #这个意思是不创建网络,而是链接已有的
对于项目 B:
同样,在项目 B 的 docker-compose.yml
文件中,也添加以下内容来连接到名为 "share" 的网络:
version: '3'
services:
service_b:
image: your_image
ports:
- "19000:9000" # 将容器 B 的端口映射到主机的端口 19000
networks:
- share
networks:
share:
external: true #这个意思是不创建网络,而是链接已有的
启动项目 A 和 B:
分别进入项目 A 和 B 的目录,并使用以下命令启动它们:
# 在项目 A 目录下启动
docker-compose up -d
# 在项目 B 目录下启动
docker-compose up -d
检查是否成功
使用下面的命令可以查看 share 网络下有哪些容器
docker network inspect share
如果要单独检测某个容器所在网络,可以使用
docker inspect container_a | grep Networks
docker inspect container_b | grep Networks
网络访问
我们如何让 a 容器直接访问 b 容器呢?不能直接使用所谓的 127.0.0.1 这种,而是要使用容器内部分配的 ip
# 查询容器IP地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_b
然后我们使用容器的 ip 和容器的端口号(非主机映射端口号)访问该容器服务
~ 个人签名: 无论发生什么都不要停下,无论到什么时候都要继续前行,要一直走下去,直到生命终止的那一刻!~