Я пытаюсь выяснить, могу ли я запустить systemd внутри контейнера докера (который запускает arch linux в контейнере).
Я запускаю docker со всеми возможностями и связываю mount в cgroups:
docker run -it --rm --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro ..
однако, если я попытаюсь запустить бинарный файл systemd:
Trying to run as user instance, but the system has not been booted with systemd.
Попытка выяснить, как правильно инициировать вещи для запуска systemd.
arch-linux
docker
systemd
Майкл Нил
источник
источник
systemd
Страница людей будет хорошее место для начала. Google также публикует несколько статей о запуске systemd под Docker.Ответы:
Чтобы запустить systemd в контейнере Docker, хост- система также должна запустить systemd. Это означает, что вы не можете использовать Ubuntu в качестве хоста. В настоящее время я знаю только о дистрибутивах хостов Fedora (в отличие от Ubuntu, имеющей последнюю версию Docker) или RHEL 7.
источник
Вот мой главный пример: D запуск systemd внутри контейнера Docker с Ubuntu: D Я получил Ubuntu, работающий с Systemd внутри Docker
GitHub Repo для моего контейнера docker-systemd
Выход:
источник
В настоящее время systemd работает неправильно в контейнере Docker из-за целого ряда причин, то есть отсутствия правильных привилегий. Вы можете прочитать об этом во множестве проблем github в проекте docker, таких как запуск systemd внутри зависания контейнера docker arch или segfaults и связанных с этим вопросов, касающихся мониторинга init / process. (Я хотел бы связать больше проблем здесь, но я не могу, поскольку у меня очевидно нет достаточной репутации).
Как видите, эта тема в настоящее время разрабатывается, и несколько патчей уже объединены для улучшения поведения, поэтому мы можем ожидать, что это сработает довольно скоро.
По-видимому, некоторым разработчикам уже удалось заставить его работать на системах Fedora, как они зафиксировали в своем блоге .
источник
Вы можете запустить systemd внутри док-контейнера. ОС хоста не имеет значения, хотя вам необходимо смонтировать том хоста / sys / fs / cgroup. Я получил его на работу, следуя этому руководству: http://developerblog.redhat.com/2014/05/05/running-systemd-within-docker-container/
источник
/sys/fs/cgroup
, который вы упомянули).Я смог работать в обратном направлении от этого: https://registry.hub.docker.com/u/codekoala/arch/
Docker 1.1 делает это проще, так как groups (ro) уже предоставлен в контейнерах - мне все еще нужен привилегированный доступ, чтобы он мог создавать монтирования PrivateTmp, но в остальном, если вы укажете cmd для запуска в качестве бинарного файла systemd - он работает хорошо.
источник
Нашел этот вопрос при попытке сделать это в официальном контейнере debian: 8. Для всех, кто пытается сделать это на официальном контейнере debian: 8 (debian: jessie), ответ @ Frank-from-DSPEED работает с небольшой модификацией, как описано в предыдущем посте git hub :
Затем из контейнера:
Это прекрасно работает для меня, и поскольку это всего лишь среда разработки, проблема безопасности не имеет для меня значения.
Примечание. Команда / sbin / init переводит / sbin / init в Процесс 1, который является ключевой частью этой работы.
источник
systemctl show-environment
возвращается для меняFailed to get D-Bus connection: Unknown error -1
. Когда я запускаю контейнер с--privileged
флагом вместо--cap-add SYS_ADMIN
(docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name=ubuntu_systemd_test debian:jessie /sbin/init
), systemctl отвечает как обычноНачиная с 2018 года, теперь это работает для меня:
docker run -it -e container=docker
your-image-name/sbin/init
Однако это не даст вам оболочки, поэтому вам нужно сначала включить в образе некоторую службу systemd (например, sshd), если это еще не сделано, чтобы сделать что-нибудь полезное.
источник