Как запустить и остановить Docker-контейнер с помощью systemd - PullRequest
0 голосов
/ 02 апреля 2019

Я собираюсь оставить вопрос с ответом, чтобы помочь всем, у кого есть подобные проблемы с совместной настройкой docker и systemd.

Как мы можем запустить и остановить Docker-контейнер с помощью systemd?

1 Ответ

0 голосов
/ 02 апреля 2019
  1. Сначала мы создадим образ докера

    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. Давайте создадим наш образ докера

сборка докера -t test_image path_to_docker_file

  1. Теперь мы можем создать и запустить новый контейнер

запуск докера --name test_container -it -d --privileged --stop-signal RTMIN + 3 test_image

  1. Или вы можете запустить существующий контейнер

запуск Docker test_image

  1. Теперь вы можете присоединиться к запущенному контейнеру для выполнения некоторой команды bash, например

docker exec -it test_container bash

  1. Для остановки контейнера

остановка док-станции test_container

ВАЖНО !!!

Не указывайте ENTRYPOINT при запуске контейнера, оно всегда должно быть SYSTEMD, если вы хотите выполнить что-то, сделайте это, подключив к контейнеру

docker exec -it test_container bash (или другие любые команды)

Вы не можете запустить systemd во время сборки образа Docker.

Решение протестировано для Docker версии 2.0.0.3 на macOS

...