如何使用systemd启动和停止docker容器

时间:2019-04-02 12:03:05

标签: docker systemd

我将留下答案,以帮助在配置docker和systemd时遇到类似问题的任何人。

我们如何使用systemd启动和停止docker容器?

1 个答案:

答案 0 :(得分:0)

  1. 首先,我们将创建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" ]
    
  2. 让我们构建我们的docker镜像

  

docker build -t test_image path_to_docker_file

  1. 现在我们可以创建并启动新容器
  

docker run --name test_container -it -d --privileged --stop-signal RTMIN + 3 test_image

  1. 或者您可以启动现有容器
  

docker start test_image

  1. 现在您可以附加到正在运行的容器以执行一些bash命令,例如
  

docker exec -it test_container bash

  1. 停止容器
  

docker stop test_container

重要!

启动容器时不要指定ENTRYPOINT,它应该始终为SYSTEMD,如果要执行某些操作,可以通过附加到容器上来完成

  

docker exec -it test_container bash(或其他任何命令)

您无法在Docker映像构建期间启动systemd。

该解决方案已在macOS上针对Docker 2.0.0.3版进行了测试