Elo*_*ati 3 docker docker-compose
我对docker-compose有点陌生,所以甚至不确定我在寻找什么。
我创建了两个映像,并使用docker-compose在本地环境中运行它们,这两个服务通过HTTP请求进行通信(两者都在localhost上运行,一个在端口3000上运行,一个在8000端口上运行)
当我将这两个服务移至docker(两个分离的容器和图像)时,我似乎无法使它们进行通信。
这是我的docker-compose文件:
version: '3'
services:
service1:
image: services/services1
ports:
- 3000:3000
links:
- "service2"
depends_on:
- service2
service2:
image: services/service2
ports:
- 8000:8000
Run Code Online (Sandbox Code Playgroud)
当我直接向每个服务发出http请求时,我会收到很好的响应,但是当我向service1发出请求时,而在services1中,我有另一个对服务2的请求,我根本无法得到响应
Error: connect ECONNREFUSED 127.0.0.1:8000
Run Code Online (Sandbox Code Playgroud)
两种服务都在0.0.0.0上运行
小智 7
docker-compose.yml 文件中声明的所有服务都在自己的容器中运行。他们有不同的ip。您可以使用将解析为服务 ip 的服务名称来寻址它们。在你的情况下:
docker-compose exec service1 ping service2
or
docker-compose exec service2 ping service1
Run Code Online (Sandbox Code Playgroud)
您应该定义一个网络并使用服务名称而不是 localhost:
version: '3'
services:
service1:
image: services/services1
ports:
- 3000:3000
links:
- "service2"
depends_on:
- service2
networks:
- mynet
service2:
image: services/service2
ports:
- 8000:8000
networks:
- mynet
networks:
mynet:
Run Code Online (Sandbox Code Playgroud)
所以我不确定我在找什么。
您很可能正在寻找docker文档的这一部分。它说明了docker compose如何处理网络。您特别感兴趣的部分是:
By default Compose sets up a single network for your app.
Each container for a service joins the default network and is both reachable
by other containers on that network, and discoverable by them
at a hostname identical to the container name.
Run Code Online (Sandbox Code Playgroud)
这意味着您应该使用service1和service2而不是localhost来跨服务定位。
归档时间: |
|
查看次数: |
4499 次 |
最近记录: |