如何从另一个容器连接到服务?

时间:2019-07-30 18:00:07

标签: docker

您好,我有2个单独的项目,分别为docker-compose-AB。 项目B有自己的Redis,我想从B项目连接到此A的Redis。 我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以使用pre-existing network

  

如果您想让容器加入现有的网络,请使用外部选项

示例文件夹结构:

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中看到它会为此组合生成一个网络,这里是prj1_default,它取决于找到第一个docker-compose.yaml的文件夹名称(prj1)。

然后在第二个docker-compose.yaml中,仅将第一个网络用作默认网络。这样,由两个不同的docker-compose.yaml生成的容器可以位于同一网络中,因此它们可以相互访问。然后,根据您的情况,prjB可以访问prjA的redis。