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 和容器的端口号(非主机映射端口号)访问该容器服务

posted @ 2024-12-31 11:10  magicdmer  阅读(3)  评论(0编辑  收藏  举报