Надеюсь, этот вопрос вас всех устраивает.
В настоящее время я пытаюсь создать образ контейнера Docker и столкнулся с проблемой. Моя оригинальная идея для 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"]
И сохранение этого как базового изображения с использованием docker build -t baseimage .
. Пока все хорошо.
Установщик приложения - это .run, который, помимо прочего, выполняет что-то вроде systemctl start xxx.service
(я не могу это изменить, и установка завершится неудачей, если эта часть завершится неудачей).
Я уже пробовал некоторые вещи для второго Dockerfile, такие как:
FROM baseimage
...
COPY xxx.run xxx.run
RUN ./xxx.run # This return an error like "Failed to get D-Bus connection: Operation not permitted"
...
и изменение исходного CMD для запуска этого скрипта:
#! /bin/bash
/usr/sbin/init # With and without & after this one
./xxx.run
Есть идеи?