У меня есть ситуация, когда мне нужно запустить некоторые службы в этом контейнере jenkins, чтобы он работал в нашем проекте. Поэтому мне нужно, чтобы Systemd был включен, чтобы сделать это...
На данный момент я получаю следующую ошибку, когда пытаюсь запустить команду «systemctl» в этом контейнере:
Не удалось установить соединение D-Bus: операция не разрешена
Что ожидается. Теперь, в ходе моего исследования, я обнаружил, что если мы используем приведенный ниже файл докера для создания образа, а затем запускаем контейнер, мы должны иметь возможность запускать команды systemctl:
FROM docker.io/openshift/jenkins-1-centos7
MAINTAINER "you" [email protected]
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"]
Я получил следующую ошибку
/bin/sh: line 0: [: cryptsetup.target: unary operator expected
rm: cannot remove 'cryptsetup.target': Permission denied
/bin/sh: line 0: [: dev-hugepages.mount: unary operator expected
rm: cannot remove 'dev-hugepages.mount': Permission denied
/bin/sh: line 0: [: dev-mqueue.mount: unary operator expected
rm: cannot remove 'dev-mqueue.mount': Permission denied
...
Я использую пользователя root для запуска команды.
Хотя, если я заменю исходное изображение на обычное изображение Centos
ОТ СЕНТОС:7
Systemd для этого вновь созданного образа (на основе centos) работает нормально.
Есть ли причина этой ошибки? или я не могу создать образ типа systemd поверх данного изображения jenkins-1-centos7?
EDIT: хорошо, поэтому эксперт помог мне понять, что «по умолчанию в Dockerfile вы запускаете команды от имени пользователя root до тех пор, пока вы явно не измените пользователей с помощью директивы USER. Однако, поскольку вы строите образ, который уже внес это изменение, я полагаю, что вы запускаете команды как пользователь Jenkins, а не как пользователь root. Если вы явно переключитесь обратно на root, вы сможете запускать команды».
Итак, новый файл выглядит примерно так:
FROM docker.io/openshift/jenkins-1-centos7
MAINTAINER "you" [email protected]
#ENV container docker
USER root
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in ; do [ $i ==systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -rf /lib/systemd/system/multi-user.target.wants/;\
rm -rf /etc/systemd/system/.wants/;\
rm -rf /lib/systemd/system/local-fs.target.wants/; \
rm -rf /lib/systemd/system/sockets.target.wants/udev; \
rm -rf /lib/systemd/system/sockets.target.wants/initctl; \
rm -rf /lib/systemd/system/basic.target.wants/;\
rm -rf /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
Оно работает!! Но теперь служба jenkins не запускается, выдавая следующую ошибку: bash-4.2# systemctl status jenkins.service ● jenkins.service - LSB: сервер непрерывной интеграции Jenkins загружен: загружен (/etc/rc.d/init.d /jenkins) Активно: сбой (результат: код выхода) со вторника 18.10.2016 19:45:17 UTC; 5 с назад Документы: man:systemd-sysv-generator(8) Процесс: 95 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=1/FAILURE)
Oct 18 19:45:17 578908315d82 systemd[1]: Starting LSB: Jenkins Continuous Integration Server...
Oct 18 19:45:17 578908315d82 jenkins[95]: /etc/rc.d/init.d/jenkins: line 51: /etc/init.d/functions: No such file or directory
Oct 18 19:45:17 578908315d82 systemd[1]: jenkins.service: control process exited, code=exited status=1
Oct 18 19:45:17 578908315d82 systemd[1]: Failed to start LSB: Jenkins Continuous Integration Server.
Oct 18 19:45:17 578908315d82 systemd[1]: Unit jenkins.service entered failed state.
Oct 18 19:45:17 578908315d82 systemd[1]: jenkins.service failed.
В настоящее время все еще исследует этот...
EDIT2: Итак, я решил проблему когда-то назад, потому что решил использовать отдельный контейнер для запуска всего остального, и этот контейнер jenkins остался нетронутым как есть...