我有两个docker镜像,一个是REST服务器(flaskapp
),另一个是Web服务器(web
)。我正在尝试使用docker-compose
运行它们。
但是,似乎 Web容器无法联系 rest容器
以下是我的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,这将解决问题,但这不是我想要的。
我不想将我的其余服务器暴露给主机。
最佳答案
你需要:
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
关于docker - docker-compose连接到其他容器失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54411067/