Это не прямой ответ на ваш вопрос, но на самом деле это может быть более важным, и я столкнулся с этой реализацией, когда читал другие ответы здесь.
У меня был некоторый опыт миграции некоторых сложных систем в Docker, и одна из важных реализаций, которые у меня были, заключается в том, что в идеале у вас должен быть один контейнер Docker для приложения / службы или «на демон».
Одна из очень важных причин этого заключается в том, что Docker не будет корректно завершать работу служб, которые вы запускаете с помощью systemctl, и фактически вы можете столкнуться с такими же повреждениями базы данных, которые происходят из-за неожиданного отключения питания.
Чтобы углубиться в это немного глубже: когда Docker выдает команду «stop» контейнеру, он отправляет сигнал SIGTERM только одному единственному процессу, который был запущен с CMD / ENTRYPOINT, а не всем службам и демонам. Таким образом, одна служба имеет предупреждение о чистом завершении работы, а все остальные отключаются.
Если вам абсолютно необходимо упаковать две службы в один и тот же контейнер (т.е. ваше приложение и базу данных PostgreSQL или что-то в этом роде), вам нужно, чтобы ваш CMD / ENTRYPOINT был сценарием, который перехватывает SIGTERM, а затем ретранслирует его в эти известные службы. Это можно сделать, но если у вас есть возможность, переосмыслите свое решение и попробуйте разбить его на несколько контейнеров.
Приложение
На сайте Docker есть интересная заметка / страница об использовании supervisord, если вам абсолютно необходимо иметь несколько служб, работающих в одном контейнере.
sudo
?