我正在尝试使用docker运行Jenkins服务器。
我已经构建了图像,并尝试使用此命令运行它:
docker run -p 8080:8080 62a4e44bf4bf
62a4e44bf4bf是泊坞窗图像ID
每当我运行此命令时,它立即关闭。
我尝试过这个命令:
docker run -i -t -p 8080:8080 62a4e44bf4bf
这将使图像保持运行,但我似乎无法使用此ip从我的浏览器访问jenkins:localhost:8080
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
答案 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 分配更多内存解决了这个问题。也许这可以帮助某人。