我有一个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
但是,我无法到达终点。
1条答案
按热度按时间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
文件应如下所示: