Сначала мы создадим образ докера
FROM debian:stretch
RUN apt-get update \
&& apt-get install -y systemd \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN rm -f /lib/systemd/system/multi-user.target.wants/* \
/etc/systemd/system/*.wants/* \
/lib/systemd/system/local-fs.target.wants/* \
/lib/systemd/system/sockets.target.wants/*udev* \
/lib/systemd/system/sockets.target.wants/*initctl* \
/lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup* \
/lib/systemd/system/systemd-update-utmp*
# systemd should be started with PID 1
CMD [ "/lib/systemd/systemd" ]
Давайте создадим наш образ докера
сборка докера -t test_image path_to_docker_file
- Теперь мы можем создать и запустить новый контейнер
запуск докера --name test_container -it -d --privileged --stop-signal RTMIN + 3 test_image
- Или вы можете запустить существующий контейнер
запуск Docker test_image
- Теперь вы можете присоединиться к запущенному контейнеру для выполнения некоторой команды bash, например
docker exec -it test_container bash
- Для остановки контейнера
остановка док-станции test_container
ВАЖНО !!!
Не указывайте ENTRYPOINT при запуске контейнера, оно всегда должно быть SYSTEMD, если вы хотите выполнить что-то, сделайте это, подключив к контейнеру
docker exec -it test_container bash (или другие любые команды)
Вы не можете запустить systemd во время сборки образа Docker.
Решение протестировано для Docker версии 2.0.0.3 на macOS