Запустить uwsgi после запуска официального контейнера nginx?
Я просто пишу настроенный контейнерный докер, включая CMD["uwsgi", "--ini", "uwsgi.ini"]
на основе официального имиджа nginx
И я вижу, что есть CMD["nginx", "-g", "daemon off"]
в конце Dockerfile это официальное изображение nginx.
Это должно означать запуск nginx при запуске контейнера. Так что мой CMD["uwsgi", "--ini", "uwsgi.ini"]
в моем dockerfile переопределит его, поэтому контейнер сразу выйдет. Как мне не переопределить его и заставить работать как nginx, так и uwsgi?
Я много гуглил, но ни одно из этих решений не основано на официальном имидже nginx. Очевидно, что я могу запустить другой контейнер только для uwsgi и подключить его к контейнеру nginx (т.е. к контейнеру, запускаемому официальным изображением nginx), но я думаю, что это хлопотно и не нужно.
2 ответа
Во-первых, это не философия докера - запускать 2 процесса в одном контейнере. Это общепринятый: официально и через сообщество
Так что вы бы предпочли собрать стек как с nginx, так и с вашим приложением.
Если вы действительно хотите или должны делать это по-своему, вы можете передать несколько команд в инструкции CMD, если сначала укажете командную оболочку... но вы также можете использовать скрипт здесь.
Помните, что скрипт будет выполняться изнутри вашего контейнера, так что думайте из POV контейнера, а не из хоста!
Ты можешь использовать ENTRYPOINT
или же CMD
запускать несколько процессов внутри контейнера, передавая скрипт / оболочку оболочки. Вы должны попытаться воздержаться от этого, так как это не лучшая практика. Один контейнер должен отвечать за управление одним процессом.
Однако существует обходной путь, с помощью которого вы можете управлять несколькими процессами внутри контейнера, т. Е. Используя оболочку сценария оболочки или супервизор.
Это есть в официальных документах -
https://docs.docker.com/config/containers/multi-service_container/