在Docker中运行Jenkins - 立即退出

时间:2015-05-04 09:20:13

标签: ubuntu jenkins docker dockerfile

我正在尝试使用docker运行Jenkins服务器。

我已经构建了图像,并尝试使用此命令运行它:

docker run -p 8080:8080 62a4e44bf4bf

62a4e44bf4bf是泊坞窗图像ID

每当我运行此命令时,它立即关闭。

我尝试过这个命令:

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

这将使图像保持运行,但我似乎无法使用此ip从我的浏览器访问jenkins:localhost: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

3 个答案:

答案 0 :(得分:2)

@Detilium Dockerfile中没有CMD或ENTRYPOINT,这就是它自动退出的原因,因为你的容器没有任何东西可以运行。根据您自己的回答,您可能通过使用exec或运行bash并手动启动它来使其工作,我猜?

虽然你Dockerfile有问题。 Docker容器必须以pid 1(在容器内)运行进程,并且必须在前台运行(没有守护进程)。

此外,图像重复发布文件系统,而不是状态。如果你在构建图像的步骤中启动一个进程(在Dockerfile中),它运行的事实将不会/持久化,因此当你运行基于此图像的容器时它将不会再次启动。启动容器时docker将运行的默认命令将使用CMD进行定义。

RUN service jenkins start

上面的行不起作用。它将在构建的这一步启动jenkins并创建一个图层(甚至可能是空的)。但是将要创建的下一个层(另一个步骤或实际的docker run)将不会运行jenkins服务/进程。

对于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 :(得分:1)

当jenkins容器无法继续运行时,jenkins目录上的权限可能会出现问题。我做了#docker pull jenkins'并惊讶地发现它不会运行。 https://hub.docker.com/_/jenkins/

要调试错误,请使用-i(交互式标志)启动映像。 (使用' docker ps -a | grep jenkins'如果你不知道你的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权限。我调整了(Sledgehammer方法):' sudo chmod 777 $ PWD / jenkins'。问题解决了。容器运行正常并将jenkins的安装运行到该目录中。

我正在运行这样的jenkins容器:(PWD = / home / myuser所以容器中的/ var / jenkins_home实际上是docker服务器上的$ PWD / jenkins)

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

答案 2 :(得分:0)

这是一个旧线程,但就我而言,是由于内存不足导致关闭。我在 Mac 上的 Docker 桌面上运行 docker。为 Docker Desktop 分配更多内存解决了这个问题。也许这可以帮助某人。