Docker:优雅地停止Django服务器

时间:2018-07-05 16:09:41

标签: python django docker

我正在使用Fatal error: Uncaught PodioBadRequestError: "Invalid JSON" Request URL: http://api.podio.com/file/v2/ docker。 在docker-compose中,我有启动django服务器的命令:

docker-compose.yml

在json格式中,命令应在exec模式下运行。在command: ["./run/web.sh"] 内部:

web.sh

当我尝试使用#!/usr/bin/env bash exec python manage.py runserver 停止服务时,它等待了10秒(默认超时),然后终止了服务。在日志中,我发现了docker-compose stop

如何使用project_web_1 exited with code 137正常停止django runserver?

2 个答案:

答案 0 :(得分:2)

在您的docker-compose.yml文件中,将stop_signal设置为SIGINT

django:
  build: .
  command: ["./run/web.sh"]
  stop_signal: SIGINT

我自己为此苦了一段时间……

启动运行服务器时,您会注意到它显示“使用CONTROL-C退出服务器”。我认为这意味着Django的运行服务器被编写为处理SIGINT(ctrl-c)而不是SIGTERM(docker发送的信号)。对我来说,更改Docker发送给Django的信号比尝试在脚本中处理SIGTERM并优雅地退出运行服务器要容易得多。

请注意,这取决于在exec脚本中使用web.sh,以便信号不会被shell吞噬-但是我看到您已经在这样做了。

答案 1 :(得分:0)

我将在这里保留适合我的配置:

yml文件:

backend:
restart: always
container_name: django_proj
image: username/django_proj
build:
  context: .
  dockerfile: ./docker/django/Dockerfile
command: /code/gunicorn-entrypoint.sh
expose:
  - 8000

gunicorn-entrypoint.sh与您的sh相同:

#!/bin/sh
sleep 10

python manage.py makemigrations

python manage.py migrate

gunicorn -c gunicorn-config.py app_name.wsgi:application