首页 > 解决方案 > 如何从另一个容器连接到服务?

问题描述

嗨,我有 2 个带有docker-compose-AB. 项目B有它自己的 Redis,我想从项目连接到这个B的 Redis 。A我该怎么做呢?

标签: docker

解决方案


您可以使用预先存在的网络

如果您希望容器加入预先存在的网络,请使用 external 选项

示例文件夹结构:

shubuntu1@shubuntu1:~/cc$ ls
prj1  prj2
shubuntu1@shubuntu1:~/cc$ tree
.
├── prj1
│   └── docker-compose.yaml
└── prj2
    └── docker-compose.yaml

2 directories, 2 files

prj1/docker-compose.yaml:

version: '3.4'

services:
  service_1:
    image: alpine
    tty: true

prj2/docker-compose.yaml:

version: '3.4'

services:
  service_2:
    image: alpine
    tty: true

networks:
  default:
    external:
      name: prj1_default

检查容器是否可以互相访问:

shubuntu1@shubuntu1:~/cc/prj2$ docker exec -it prj2_service_2_1 ping service_1
PING service_1 (192.168.192.2): 56 data bytes
64 bytes from 192.168.192.2: seq=0 ttl=64 time=0.050 ms
64 bytes from 192.168.192.2: seq=1 ttl=64 time=0.148 ms
64 bytes from 192.168.192.2: seq=2 ttl=64 time=0.161 ms

你可以看到第一个 docker-compose.yaml,它会为这个 compose 生成一个网络,这里是prj1_default,它取决于找到第一个 docker-compose.yaml 的文件夹名称(prj1)。

然后,在第二个 docker-compose.yaml 中,使用第一个网络作为默认网络。这样,两个不同的 docker-compose.yaml 生成的容器就可以在同一个网络中,从而可以互相访问。然后,对于您的情况,prjB 能够访问 prjA 的 redis。


推荐阅读