Я пытаюсь запустить контейнер докеров с systemd в качестве процесса инициализации, чтобы я мог запускать несколько служб из этого контейнера, и получаю следующую странную ошибку:
Systemd отображается как PID 1, когда я запускаю top, но ни одна из служб, которые я активировал через systemctl, не запущена, и попытка получить статус systemctl дает мне система не была загружена с systemd в качестве процесса инициализации (PID 1 )
Вот мой файл докеров:
FROM ubuntu:20.04
ENV container docker
ENV LC_ALL C
ENV DEBIAN_FRONTEND noninteractive
RUN sed -i 's/# deb/deb/g' /etc/apt/sources.list
RUN apt-get update \
&& apt-get install -y systemd systemd-sysv \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN cd /lib/systemd/system/sysinit.target.wants/ \
&& ls | grep -v systemd-tmpfiles-setup | xargs rm -f $1
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/basic.target.wants/* \
/lib/systemd/system/anaconda.target.wants/* \
/lib/systemd/system/plymouth* \
/lib/systemd/system/systemd-update-utmp*
...assorted aptget installs...
ENV LOCAL="yes"
...assorted utils scripts...
RUN useradd --create-home fractal \
&& usermod -aG sudo fractal \
&& echo 'fractal:password1234567.' | chpasswd
...assorted utils scripts...
ADD bootstrap.sh /home/fractal
ADD entry.sh /home/fractal
ADD fractal-input.rules home/fractal
RUN chmod +x /home/fractal/bootstrap.sh \
&& chown -v -R fractal:fractal /home/fractal
RUN chown root:root /run/user
RUN chmod +x /home/fractal/entry.sh
...adding assorted services...
VOLUME [ "/sys/fs/cgroup" ]
RUN systemctl set-default multi-user.target
ENV init /lib/systemd/systemd
....assorted services enabled....
CMD ["/lib/systemd/systemd"]
Вы не можете без особых усилий использовать systemd в контейнере Docker. Вместо этого большинство людей используют что-то вроде supervisord.