繁体   English   中英

无法请求运行在 docker-compose 的 FastAPI

[英]Unable to requests FastAPI running in docker-compose

我有一个 Dockerfile,它在端口 8000 上公开了一个 API:

# ..

EXPOSE 8000
ENV PYTHONPATH="src/."
CMD ["gunicorn", "-b :8000", "-k", "uvicorn.workers.UvicornWorker", "fingerprinter.api.server:app"]

它只是一个带有简单端点的简单 FastAPI 服务器:

@app.get("/health")
def health():
    return "OK"

这是docker-compose.yaml的相关部分:

version: "3.7"

services:

  fprint-api:
    container_name: fprint-api-v2
    image: "fprint-api:v0.0.1"
    depends_on:
      - fprint-db
      - fprint-svc

    network_mode: "host"
    extra_hosts:
      - "host.docker.internal:host-gateway"
    expose:
      - "8000"

    build:
      context: ../.
      dockerfile: docker/Dockerfile.fprint-api

但是,我无法到达终点。

Expose in Dockerfile 并没有真正发布端口Dockerfile-EXPOSE 它更像是 Dockerfile 读者的“文档”,它表明该端口旨在发布。

docker-compose.yml你 map 端口从 docker 容器到主机系统使用port Docker 组合端口 docker-compose.yml关键字expose只为链接的服务暴露端口,它不会将端口发布到宿主机Docker compose - expose

所以你的docker-compose.yml文件应该是这样的:

version: "3.7"

services:

  fprint-api:
    container_name: fprint-api-v2
    image: "fprint-api:v0.0.1"
    depends_on:
      - fprint-db
      - fprint-svc

    # network_mode: "host"
    extra_hosts:
      - "host.docker.internal:host-gateway"
    ports:
      - "8000:8000"

    build:
      context: ../.
      dockerfile: docker/Dockerfile.fprint-api

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM