Текущий официальный образ Docker для CentOS содержит systemd
, но по умолчанию он неактивен. Это задокументировано на странице Docker Hub для образа CentOS .
Systemd is now included in both the centos:7 and centos:latest base containers, but it is not active by default. In order to use systemd, you will need to include text similar to the example Dockerfile below:
Предоставленный образец Dockerfile выглядит следующим образом:
FROM centos:7
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
При удалении этих файлов systemd
предотвращается запуск нескольких служб во время запуска контейнера. Этот подход приводит к голым -костям, но функциональным systemd
внутри контейнера.
Для запуска контейнера из этого образа также требуется специальный параметр для подключения тома cgroup
:
$ docker run -it -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd-app
Опция -v
bind монтирует каталог /sys/fs/cgroup
с хоста в контейнер в режиме -только для чтения.
Также отмечается, что на хостах Ubuntu может потребоваться дополнительная опция для корректной работы контейнера:
$ docker run -it -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /tmp/$(mktemp -d):/run systemd-app
Примечание. :Большая часть этого материала, включая сам файл Docker, по-видимому, взята из этой записи в блоге Дэниела Уолша:Запуск systemd в контейнере Docker .
просто попробуйте увеличить дисковое пространство по умолчанию, предоставляемое виртуальным ящиком