无法请求在Docker-compose中运行的FastAPI

rggaifut  于 2023-01-29  发布在  Docker
关注(0)|答案(1)|浏览(177)

我有一个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

但是,我无法到达终点。

omhiaaxx

omhiaaxx1#

Expose in Dockerfile并不真正发布端口Dockerfile - EXPOSE。它更像是为Dockerfile的读者准备的“文档”,它表明端口是打算发布的。
docker-compose.yml中,您可以使用port Docker compose - ports将端口从Docker容器Map到主机系统。在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

相关问题