gpt4 book ai didi

docker - Uvicorn 不会用 CTRL+C 退出

转载 作者:行者123 更新时间:2023-12-05 01:52:22 29 4
gpt4 key购买 nike

我有一个使用 uvicorn 的 Python FastAPI 应用程序。我把它打包在 docker 容器中。当我使用如下命令运行应用程序(在我的 Windows 10 机器上的 Power Shell 中)时:docker run -p 8080:8080 my-image-name 我得到以下 uvicorn 启动文本:

INFO:     Started server process [1]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)

当我按 CTRL+C 终止应用程序时,没有任何反应。我总是不得不关闭终端才能让它停止。

这是因为它在 docker 容器中运行吗?

我知道我可以在分离模式 (-d) 下运行容器,但有时我想实时查看容器日志。

如何杀死 docker 镜像和 uvicorn 进程并保持终端继续运行?

最佳答案

您需要使用 --tty--interactice 运行容器,以便转发您的键盘输入。

-t, --tty Allocate a pseudo-TTY
-i, --interactive Keep STDIN open even if not attached

docker run -ti myapp

此外,您应该确保您不对 entrypoint 使用 shell 语法。 ,如果你有的话。

The shell form prevents any CMD or run command line arguments from being used, but has the disadvantage that your ENTRYPOINT will be started as a subcommand of /bin/sh -c, which does not pass signals. This means that the executable will not be the container’s PID 1 - and will not receive Unix signals - so your executable will not receive a SIGTERM from docker stop .

ENTRYPOINT ["uvicorn"]
CMD ["app.py"]

附带说明一下,关闭终端通常不会停止容器。在执行 docker ps 时,您应该仍会看到它在运行。

关于docker - Uvicorn 不会用 CTRL+C 退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71620812/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com