我有一个包含两个服务的docker-compose文件:app
和httpd
app:
image: primus852/machinelearning:latest
ports:
- 5001:5000
expose:
- "5001"
restart: always
networks:
- default
volumes:
- ./api:/app
environment:
- FLASK_APP=app/source/__init__.py
- FLASK_ENV=development
httpd:
image: primus852/mitswiki:latest
ports:
- 80:80
restart: always
networks:
- default
volumes:
- ./project:/var/www/html
app
容器的端点如下:
@app.route('/predict', methods=['GET'])
def predict():
...DO STH....
我可以在浏览器中打开http://localhost:5001/predict
,可以运行...
我可以curl缩cmd
:curl localhost:5001/predict
,开始工作...
但是当我在httpd
容器中时,这在控制台上不起作用:curl localhost:5001/predict
卷曲:(7)无法连接到本地主机端口5001:连接被拒绝
所以我以为我在app
容器中寻址我的mysql时是在httpd
容器中寻址:curl app:5001/predict
,但是结果相同。
有人能看到我在做什么吗?
答案 0 :(得分:2)
根据您的 yaml :
ports:
- 5001:5000
在内部容器中,您必须使用端口5000
答案 1 :(得分:0)
在httpd
容器localhost
内仅指该httpd
容器。默认情况下,它无法访问其他容器。
可能发生的另一件事是您的应用未打开以进行“远程”访问。从一个容器到另一个容器的连接是远程连接。
在docker-compose文件中,您可以link个容器彼此之间
虽然容器是链接的,但是您可以使用curl使用/predict
来获取curl app:5001/predict
页面