在 Docker 上下文中使用 FastAPI 更改 Gunicorn 服务器的端口

Changing port of Gunicorn Server with FastAPI in Docker context

我使用 gunicorn 在 Docker 中启动我的网络服务器,如下所示:

CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--reload", "-k", "uvicorn.workers.UvicornWorker", "app.main:app"]

我有一个 CLI 工具,应该能够否决 Docker 文件中设置的端口:

@ runtime.command()
def run(branch: Optional[str] = "master", port: Optional[int] = 8000):

    subprocess.call(f"docker run -it -p 7000:7000 test", shell=True)

当我运行这个命令时,服务仍然运行宁在端口 8000 上,而不是在端口 7000 上。

[2021-11-25 15:40:20 +0000] [1] [INFO] Starting gunicorn 20.1.0
[2021-11-25 15:40:20 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000 (1)
[2021-11-25 15:40:20 +0000] [1] [INFO] Using worker: uvicorn.workers.UvicornWorker
[2021-11-25 15:40:20 +0000] [11] [INFO] Booting worker with pid: 11
[2021-11-25 15:40:21 +0000] [11] [INFO] Started server process [11]
[2021-11-25 15:40:21 +0000] [11] [INFO] Waiting for application startup.

有没有办法覆盖我的 Docker 文件中设置的端口?

如果你想改变 docker 容器的行为,并且你想在不创建新图像的情况下这样做(这可以通过 docker commit 工作流程实现),那么你必须覆盖容器入口点并根据需要启动它:

$ docker run --rm -it --entrypoint=gunicorn your_image_name --bind 0.0.0.0:7000 --reload -k uvicorn.workers.UvicornWorker app.main:app

用您的图片名称替换 your_image_name