我有两个docker映像,一个为REST服务器(flaskapp
),另一个为Web服务器(web
)。我正在尝试使用docker-compose
运行它们。
但是,网络容器似乎无法联系休息容器
以下是我的docker-compose.yml
文件:
version: '3'
services:
flaskapp:
build: ./rest_server
restart: always
networks:
- docker_network
expose:
- 5001
web:
build: ./web
restart: always
ports:
- 3002:3000
depends_on:
- flaskapp
networks:
- docker_network
healthcheck:
test: ["CMD", "curl", "-f", "http://flaskapp:5001/todos"]
networks:
docker_network:
driver: bridge
我的Web应用程序引用以下URL:
但是,如果我使用docker exec -it <id> /bin/bash
登录到docker容器并运行以下命令,则会得到我期望的json响应。
我也可以公开我的其余服务器端口,然后将其余服务器地址更改为Web服务器中的localhost,这将解决问题,但这不是我想要的。
我不想将我的其余服务器暴露给主机。
答案 0 :(得分:2)
您需要:
5001
容器的端口flaskapp
实际上,根据documentation,EXPOSE
指令“公开了端口,而没有将它们发布到主机上-只有链接的服务才能访问它们”。因此,它允许“公开”端口的容器与同一网络中的其他容器之间进行通信。
尝试类似的事情:
version: '3'
services:
flaskapp:
build: ./rest_server
expose:
- 5001
networks:
- docker_network
web:
build: ./web
restart: always
ports:
- 3002:3000
networks:
- docker_network
depends_on:
- flaskapp
networks:
docker_network:
driver: bridge
答案 1 :(得分:1)
只需添加:
expose:
- "5001"
至flaskapp部分。
这不会将端口5001暴露给主机,而只是将端口5001暴露给同一网络中的所有容器,这正是您想要的。