2016-10-14 27 views
1

我有一種情況,我需要在此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: 所以我解決這個問題的某個時候回來,因爲我決定用一個單獨的容器運行一切,這詹金斯容器不變,因爲它是。 ..

回答

2

此外,您的issue on openshift/jenkins,你也有docker issue 7459其中指出:

It works for me with this PR #25567 with just --cap-add SYS_ADMIN .

This commit尚未在碼頭工人雖然被釋放。

+0

非常感謝您的意見,但截至目前openshift起源支持碼頭版本1.10。所以顯然我不能使用這個公關。 –

+0

Docker問題7459的解決方案是使用docker文件中的給定步驟創建新映像,我的問題是爲什麼我無法使用相同的步驟創建類似於啓用systemd的jenkins-1-centos7映像的映像。 .. –

+0

@AkshayaKhare我明白。碼頭1.10可能不支持這一點,但。 – VonC

相關問題