我有一種情況,我需要在此jenkins容器中啓動一些服務,以使其在我們的項目中工作。所以我需要在爲了做到這一點使Systemd ...如何在openshift/jenkins-1-centos7碼頭集裝箱中啓用系統服務?
截至目前,我得到下面的錯誤,當我嘗試這個容器內運行「systemctl」命令:
Failed to get D-Bus connection: Operation not permitted
這是預期。 現在我的研究,我發現,如果我們使用下面的泊塢窗文件創建一個圖像,然後運行一個容器,我們應該能夠運行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圖像
FROM centos:7
這個新創建的圖像的systemd(基於CentOS)工作正常。
是否有這個錯誤的原因?或者我無法在給定的jenkins-1-centos7圖像上創建systemd類型的圖像?
編輯:好了,專家讓我瞭解到,「默認情況下,在Dockerfile你以root身份運行命令,直到你明確地改變用戶與用戶指令但是,因爲你是一個已經在圖像上建立。作出這樣的改變我相信你是以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"]
它的作品! 但現在,詹金斯服務並沒有開始給出以下錯誤: bash-4.2#systemctl status jenkins.service ●jenkins.service - LSB:Jenkins連續集成服務器 加載:加載(/etc/rc.d /init.d/jenkins) 活動:失敗(結果:退出代碼)自Tue 2016-10-18 19:45:17 UTC; 5S前 文檔:人:systemd-SYSV發電機(8) 工藝:95 ExecStart =的/ etc /的rc.d/init.d /的詹金斯啓動(代碼=退出,狀態= 1 /失敗)
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: 所以我解決這個問題的某個時候回來,因爲我決定用一個單獨的容器運行一切,這詹金斯容器不變,因爲它是。 ..
非常感謝您的意見,但截至目前openshift起源支持碼頭版本1.10。所以顯然我不能使用這個公關。 –
Docker問題7459的解決方案是使用docker文件中的給定步驟創建新映像,我的問題是爲什麼我無法使用相同的步驟創建類似於啓用systemd的jenkins-1-centos7映像的映像。 .. –
@AkshayaKhare我明白。碼頭1.10可能不支持這一點,但。 – VonC