docker-compose在不同的docker-compose文件中相同的服务名称碰撞

问题描述 投票:0回答:2

有2个服务,有2个文件。 服务通过桥网络连接,以便它们可以在本地进行通信。

Service_1
docker-compose.yml

  1. docker-compose.yml
  2. Service_2
version: '3.7' services: django: build: context: . ports: - "6000:6000" networks: - shared-local-network command: python manage.py runserver 0.0.0.0:6000 networks: shared-local-network: external: true

  1. docker-compose.yml
    因此,这些服务在不同的项目中,但它们的服务名称是相同的:
  2. version: '3.7' services: django: build: context: . ports: - "8000:8000" networks: - shared-local-network command: python manage.py runserver 0.0.0.0:8000 networks: shared-local-network: external: true
但是,当我尝试从另一个服务请求一项服务时,例如从service_1发送请求_2:

django
它是无法达到的。

curl http://django:8000

表明它也无法达到。

我注意到,当将请求从service_1发送到

netcat -vz django 8000
时,它会将请求发送到Service_1,这就是为什么它找不到打开的8000端口,因为Service_1已打开了6000个端口。

可以在不将服务重命名为独特服务的情况下解决。

我们假设您有这两个途径:

http://django:8000

docker-compose.yml

/home/service_1/
/home/service_2/
也以同一名称,也是

service_1
docker docker-compose
2个回答
1
投票
当您运行

docker-compose

service_2
时,运行的容器名称为

service_1

,当您运行
docker-compose
service_1_django
service_2

时,运行的容器名称为

docker-compose

.
为了连接这两个,您应该在每个容器中使用这两个名称中的任何一个:
service_2_django

docker-compose具有配置选项“主机名”。您可以将其设置为两个容器中的每个容器的其他主机名,然后通过此主机名而不是服务名称连接到它们。
Service 1组成:
service_1_django
service_2_django
Service 2组成:

version: '3.7' services: django: hostname: django_1 build: context: . ports: - "6000:6000" networks: - shared-local-network command: python manage.py runserver 0.0.0.0:6000 networks: shared-local-network: external: true

然后从服务1的容器中,命令
curl http:// django_2:8000
如果它们在同一容器中的同一主机上,将起作用。
    

0
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.