我在用着docker
and docker-compose
。
里面docker-compose.yml
我有启动 django 服务器的命令:
command: ["./run/web.sh"]
在 json 格式中,命令应在 exec 模式下运行。里面web.sh
:
#!/usr/bin/env bash
exec python manage.py runserver
当我试图停止服务时docker-compose stop
它等待了 10 秒(默认超时),然后终止服务。在我发现的日志中project_web_1 exited with code 137
.
如何优雅地停止 django runserverdocker stop
?
In your docker-compose.yml
文件,设置stop_signal
to SIGINT
:
django:
build: .
command: ["./run/web.sh"]
stop_signal: SIGINT
我自己也为此苦苦挣扎了一段时间……
启动 runserver 时,您会注意到它显示“使用 CONTROL-C 退出服务器”。我认为这意味着 Django 的 runserver 是为了处理SIGINT
(ctrl-c) 而不是SIGTERM
(泊坞窗发送的信号)。对我来说,更改 Docker 发送到 Django 的信号比尝试处理更容易SIGTERM
在我的脚本中并优雅地退出运行服务器。
请注意,这取决于使用exec
在你的web.sh
脚本,以便信号不会被 shell 吃掉 - 但我看到你已经这样做了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)