如何使用 systemd 启动和停止 docker 容器
How to start and stop docker container with systemd
我将留下问题和答案,以帮助任何在配置 docker 和 systemd 时遇到类似问题的人。
我们如何使用 systemd 启动和停止 docker 容器?
首先我们将创建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
- 现在您可以附加到 运行 容器来执行一些 bash 命令,例如
docker exec -it test_container bash
- 停止容器
docker stop test_container
重要!!!
启动容器时不要指定 ENTRYPOINT 它应该始终是 SYSTEMD,如果你想执行某些操作通过附加到容器来执行
docker exec -it test_container bash (or other any commands)
您无法在 Docker 映像构建期间启动 systemd。
解决方案已针对 Docker 版本 2.0.0.3 在 macOS
上进行了测试
我将留下问题和答案,以帮助任何在配置 docker 和 systemd 时遇到类似问题的人。
我们如何使用 systemd 启动和停止 docker 容器?
首先我们将创建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
- 现在您可以附加到 运行 容器来执行一些 bash 命令,例如
docker exec -it test_container bash
- 停止容器
docker stop test_container
重要!!!
启动容器时不要指定 ENTRYPOINT 它应该始终是 SYSTEMD,如果你想执行某些操作通过附加到容器来执行
docker exec -it test_container bash (or other any commands)
您无法在 Docker 映像构建期间启动 systemd。
解决方案已针对 Docker 版本 2.0.0.3 在 macOS
上进行了测试