Docker 部署 Jenkins 遇到的问题总结

1. 启动官方镜像时报错

官方提供了一个非常简单的实例,我觉得也是够用了,Docker启动Jenkins的方式如下:

docker run --name jenkins -p 9999:8080 -p 50001:50000 -d -v /path/to/jenkins:/var/jenkins_home jenkins/jenkins:lts

实际上用这个命令的时候会出现如下的错误:

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?

需要修改下目录权限, 因为当映射本地数据卷时,/path/to/jenkins目录的拥有者为root用户,而容器中jenkins user的uid为1000。所以需要执行如下命令:

chown -R 1000:1000 /path/to/jenkins

2. An error occurred during installation: No such plugin: cloudbees-folder

启动完jenkins之后打开控制台页面,初次安装后需要执行安装插件的步骤,但是点击任意一个插件安装,都会报类似这样的错误:An error occurred during installation: No such plugin: cloudbees-folder
Github上已经有报类似错误的帖子。并给出了解决方案:https://github.com/jenkinsci/docker/issues/424,对,就是重启,一个简单到不能再简单的方案,这是不是bug?

http://localhost:8080/restart worked on blueocean running in docker container running on Mac ...

3. Host模式挂载网路

有时候一些特殊的需求,Jenkins需要用network=host模式启动。这种情况下,因为默认Dockfile的暴露端口为8080/50000。其中8080为常用端口可能会被同一机器上的其他服务占用,因此我们直接执行一下的命令会报端口被占用的错误:

docker run --name zsh-jenkins --network=host -d -v /path/to/zsh-jenkins:/var/jenkins_home jenkins/jenkins:lts

解决办法只能修改Dockerfile中的暴露端口,因为Jenkins提供了启动参数JENKINS_OPTS,我们新建一个Dockerfile,覆盖掉官方镜像中的配置,找一个不常用的端口即可:

FROM jenkins/jenkins:lts

ENV JENKINS_OPTS --httpPort=-1 --httpPort=9988
ENV JENKINS_SLAVE_AGENT_PORT 50001

EXPOSE 9988
EXPOSE 50001

你可能感兴趣的:(Docker 部署 Jenkins 遇到的问题总结)