我将留下答案,以帮助在配置docker和systemd时遇到类似问题的任何人。
我们如何使用systemd启动和停止docker容器?
答案 0 :(得分:0)
首先,我们将创建docker映像
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" ]
让我们构建我们的docker镜像
docker build -t test_image path_to_docker_file
docker run --name test_container -it -d --privileged --stop-signal RTMIN + 3 test_image
docker start test_image
docker exec -it test_container bash
docker stop test_container
重要!
启动容器时不要指定ENTRYPOINT,它应该始终为SYSTEMD,如果要执行某些操作,可以通过附加到容器上来完成
docker exec -it test_container bash(或其他任何命令)
您无法在Docker映像构建期间启动systemd。
该解决方案已在macOS上针对Docker 2.0.0.3版进行了测试