Ваш start.sh
скрипт запускает несколько фоновых процессов, затем достигает конца и завершается (успешно, то есть с кодом состояния 0). Когда сценарий start.sh
завершается, поскольку это ENTRYPOINT
контейнера, контейнер выходит с тем же кодом состояния.
Должен быть какой-то процесс, работающий как процесс переднего плана, и контейнер будет продолжать работать как пока этот процесс есть. В вашем случае это процесс GUnicorn, и вы можете указать это как изображение CMD
в Dockerfile:
CMD gunicorn --chdir hello --bind :8000 hello_django.wsgi:application
Если единственное, что в вашем скрипте start.sh
выполняет эту строку, вы можете удалить строка ENTRYPOINT
. Если нет, измените его на запуск exec "$@"
в качестве последней строки (для запуска CMD
) и измените строку Dockerfile ENTRYPOINT
на JSON синтаксис массива:
RUN chmod +x start.sh
ENTRYPOINT ["./start.sh"]
CMD gunicorn --chdir hello --bind :8000 hello_django.wsgi:application
#!/bin/sh
# ... do other pre-launch setup ...
# Run the CMD
exec "$@"
(Я бы избегал запускать фоновые процессы в сценарии запуска контейнера: ничто не будет отслеживать или перезапускать их, и вы можете оказаться в состоянии, когда у вас есть наполовину запущенный контейнер или когда вам без необходимости нужно перезапускать некоторые вещи, потому что другие получили Если вам нужно запустить несколько процессов, попробуйте организовать их запуск в отдельных контейнерах; если вам нужен только один, запустите его как процесс переднего плана.)