有2个服务,有2个文件。 服务通过桥网络连接,以便它们可以在本地进行通信。
Service_1
docker-compose.yml
docker-compose.yml
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
docker-compose.yml
因此,这些服务在不同的项目中,但它们的服务名称是相同的: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-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 如果它们在同一容器中的同一主机上,将起作用。