从另一个码头工人在一个码头工人容器中访问端点

时间:2018-12-04 11:24:52

标签: docker curl

我有一个包含两个服务的docker-compose文件:apphttpd

app

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

httpd:
  image: primus852/mitswiki:latest
  ports:
    - 80:80
  restart: always
  networks:
    - default
  volumes:
    - ./project:/var/www/html

Flask应用程序

app容器的端点如下:

@app.route('/predict', methods=['GET'])
def predict():
    ...DO STH....

我可以在浏览器中打开http://localhost:5001/predict,可以运行... 我可以curl缩cmdcurl localhost:5001/predict,开始工作...

但是当我在httpd容器中时,这在控制台上不起作用:curl localhost:5001/predict

  

卷曲:(7)无法连接到本地主机端口5001:连接被拒绝

所以我以为我在app容器中寻址我的mysql时是在httpd容器中寻址:curl app:5001/predict,但是结果相同。

有人能看到我在做什么吗?

2 个答案:

答案 0 :(得分:2)

根据您的 yaml

ports:
    - 5001:5000

在内部容器中,您必须使用端口5000

答案 1 :(得分:0)

httpd容器localhost内仅指该httpd容器。默认情况下,它无法访问其他容器。

可能发生的另一件事是您的应用未打开以进行“远程”访问。从一个容器到另一个容器的连接是远程连接。

在docker-compose文件中,您可以link个容器彼此之间

虽然容器是链接的,但是您可以使用curl使用/predict来获取curl app:5001/predict页面