2015-05-04 131 views
3

我正在嘗試與docker運行Jenkins服務器。在Docker中運行Jenkins - 立即退出

我已經建立的形象,並試圖用這個命令運行它:

docker run -p 8080:8080 62a4e44bf4bf 

的62a4e44bf4bf是泊塢窗圖像ID

每當我運行此命令時,它會立即關閉。

我試圖用這個命令:

docker run -i -t -p 8080:8080 62a4e44bf4bf 

這將保持圖像的運行,但我似乎無法從我的瀏覽器使用此IP訪問詹金斯:本地主機:8080

DOCKERFILE:

FROM ubuntu:latest 

#Oracle Java7 install 
RUN apt-get install software-properties-common -y 
RUN apt-get update 
RUN add-apt-repository -y ppa:webupd8team/java 
RUN apt-get update 
RUN echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections 
RUN apt-get install -y oracle-java7-installer 

#Jenkins install 
RUN wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - 
RUN sudo echo "deb http://pkg.jenkins-ci.org/debian binary/" >>  /etc/apt/sources.list 
RUN apt-get update 
RUN apt-get install --force-yes -y jenkins 

#Zip support install 
RUN apt-get update 
RUN apt-get -y install zip 

#Unzip hang.zip 
#RUN cp /shared/hang.zip /var/lib/jenkins 
#RUN unzip -o /var/jenkins/hang.zip -d /var/lib/jenkins/ 

#Restart jenkins server 
RUN service jenkins start 

EXPOSE 8080 

回答

1

@Detilium沒有CMD或入口點在你的Dockerfile,這就是爲什麼它會自動退出,因爲你的容器沒有任何運行。根據你自己的回答,你可能通過使用exec或運行bash並手動啓動它來工作,我猜?

雖然你有什麼問題Dockerfile。 Docker容器必須運行一個進程爲pid 1(在容器內),並且必須在前臺運行(無守護進程)。

更重要的是,圖像reperesent文件系統,而不是狀態。如果您在圖像構建的一個步驟(在Dockerfile中)啓動了一個流程,則它運行的事實將不會/持續/,因此當您基於此映像運行容器時,它不會再次啓動。 docker在啓動容器時運行的默認命令是CMD

RUN service jenkins start 

上述行不起作用。它會在構建的這一步啓動jenkins並創建一個圖層(甚至可能是空的)。但是下一層將被創建(另一步或實際docker run)將不會運行jenkins服務/進程。

對於/靈感/對於詹金斯Dockerfile,你可以看看https://github.com/aespinosa/docker-jenkins/blob/master/Dockerfile。請注意,ENTRYPOINT ["java", "-jar", "/opt/jenkins.war"]也可能是 CMD ["java", "-jar", "/opt/jenkins.war"]

我建議您閱讀以下文檔以獲取有關碼頭的更多理解:https://docs.docker.com/userguide/dockerimages/https://docs.docker.com/reference/builder/https://docs.docker.com/articles/dockerfile_best-practices/

1

當jenkins容器不能保持運行時,jenkins目錄中的權限可能是一個問題。我做了'碼頭拉詹金斯',很驚訝地發現它不會運行。 https://hub.docker.com/_/jenkins/

要調試您的錯誤,請使用-i(交互式標誌)啓動圖像。 (使用 '泊塢窗PS -a | grep的詹金斯' 如果你不知道你的ID)

docker start 62a4e44bf4bf -i 

我看到了這樣的錯誤:

touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied 
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? 

所以我檢查的/ var/jenkins_home所有權和權限。 我看到$ PWD/jenkins目錄是用root:root 700權限創建的。我調整了(大錘方法):'sudo chmod 777 $ PWD/jenkins'。問題解決了。容器運行正常,並將jenkins安裝到該目錄中。

我運行詹金斯容器是這樣的:(PWD = /家/ myuser的這樣的/ var/jenkins_home在容器實際上是$搬運工服務器上PWD /詹金斯)

docker run -d -p 49001:8080 -v $PWD/jenkins:/var/jenkins_home:z -t jenkins