Вы должны предположить, что systemd и systemctl просто не работают в Docker, и найти другой подход к вашим целям более высокого уровня.Рекомендуется запускать один сервис и один сервис только в контейнере Docker и использовать несколько контейнеров, если вам нужно несколько координирующих сервисов;если вам действительно нужно запустить несколько вещей в одном и том же контейнере, то supervisord - это обычный диспетчер процессов.
Самая большая проблема с systemd в Docker заключается в том, что по умолчанию он хочет контролировать много вещей,Посмотрите на рисунок на домашней странице systemd : он хочет выполнить настройку на уровне ядра, управлять файловыми системами и запустить несколько сервисов, которые все уже выполнены на хосте и не нужны вКонтейнер Docker.«Простой» способ запуска systemd в Docker заключается в предоставлении ему разрешения на перенастройку вашего хоста;ссылка, которую вы предоставляете, имеет «сложный» способ, который включает в себя удаление большинства ее управляющих файлов.
В контексте Dockerfile также существует проблема, заключающаяся в том, что каждая строка RUN начинается с чистого листа без процессов, запущенных вообще.Так что ваша команда systemctl start ...
не работает, потому что не запущен systemd init;и даже если это произойдет, когда эта команда RUN завершится, процесс завершится, и служба не будет работать на следующей строке.
Возможно, вы сможете найти готовый syslog-ngimage , набрав "syslog" в поле поиска на https://hub.docker.com,, что позволит избежать этой проблемы.Он также может работать для установки syslog-ng на базе CentOS, как и вы, но полностью пропустите systemd и просто запустите службу в качестве основной команды, которую образ запускает
CMD ["syslog-ng", "-F"]