在 CentOS 系统中使用 Docker 安装 Jenkins 时,如果遇到启动容器时报错 touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
的问题,这通常是因为 Jenkins 在初始化过程中尝试创建或修改 /var/jenkins_home
目录下的文件,但是由于权限不足导致的。
解决方法如下:
-
确保数据卷的权限正确:
当你通过-v
参数将宿主机上的目录映射到 Docker 容器内的/var/jenkins_home
时,需要确保宿主机上的目录具有可写权限。可以使用以下命令来更改所有者和组,使其与运行 Jenkins 容器的用户(通常是jenkins
用户)匹配,并设置适当的权限:# 假设你的宿主机目录是 /path/to/jenkins_home sudo chown -R 1000:1000 /path/to/jenkins_home sudo chmod -R 755 /path/to/jenkins_home
其中,1000 是 Jenkins Docker 镜像内部默认使用的 UID 和 GID,不同版本或配置可能略有差异,请根据实际情况调整。
-
启动容器时指定用户:
启动 Jenkins 容器时,可以通过--user
参数指定容器内执行进程的用户,确保其能够访问和修改挂载的数据卷:docker run -d --name jenkins \ -p 8080:8080 -p 50000:50000 \ -v /path/to/jenkins_home:/var/jenkins_home \ --user root \ jenkins/jenkins:lts
注意:通常情况下不推荐直接以
root
用户运行 Jenkins 容器,而是应该保证挂载目录拥有正确的权限后,按照镜像中预设的 Jenkins 用户(如上面提到的 UID 1000)来运行容器。不过,在某些初始化阶段为了能顺利完成文件创建,可以暂时以root
运行,然后在问题解决后再切换回非 root 用户。 -
重新启动容器并检查日志:
应用上述解决方案后,重启 Jenkins 容器以确保错误得到解决,并再次查看容器的日志输出确认是否还有权限相关的问题。docker restart jenkins docker logs -f jenkins