我也遇到了这个问题,我将使用不同的目录路径来避免这个答案中的歧义。
例如。 -v /var/host/jenkins_home:/var/jenkins_home
首先我想重现错误并在我的主机上使用sudo -u root mkdir -p /var/host/jenkins_home 创建目录。由于该目录是由root 创建的,因此只有root 有权访问它。
$ ls -al /var/host/jenkins_home/
total 8
drwxr-xr-x 2 root root 4096 Jul 27 03:54 .
drwxr-xr-x 3 root root 4096 Jul 27 03:54 ..
当我现在启动 jenkins 时,我会遇到和你一样的错误
$ docker run -p 8080:8080 -p 50000:50000 -v /var/host/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
要解决此问题,您必须更改 主机文件系统 的权限,以便 uid 1000 和 gid 1000 可以访问 /var/host/jenkins_home。
sudo chown -R 1000:1000 /var/host/jenkins_home/
如果我现在启动 jenkins,它将起作用:
$ docker run -p 8080:8080 -p 50000:50000 -v /var/host/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
Running from: /usr/share/jenkins/jenkins.war webroot: EnvVars.masterEnvVars.get("JENKINS_HOME")
2020-07-27 03:51:36.430+0000 [id=1] INFO org.eclipse.jetty.util.log.Log#initialized: Logging initialized @441ms to org.eclipse.jetty.util.log.JavaUtilLog
2020-07-27 03:51:36.577+0000 [id=1] INFO winstone.Logger#logInternal: Beginning extraction from war file
使用 docker 时,您应该考虑 uid 和 gid 而不是用户名,因为它们可能不同并导致混淆。
例如在我的主机上,uid 1000 是我的用户 rene
$ id -un 1000
rene
但在容器中是jenkins:
$ docker exec <CONTAINER_NAME> id -un 1000
jenkins
编辑
我仍然遇到同样的错误
检查容器中的权限
docker run --rm -v /var/host/jenkins_home:/var/jenkins_home jenkins/jenkins:lts ls -al /var/jenkins_home
它应该告诉你jenkins 是/var/jenkins_home 的所有者和组
total 12
drwxr-xr-x 2 jenkins jenkins 4096 Jul 27 04:56 .
drwxr-xr-x 1 root root 4096 Jul 15 14:56 ..
-rw-r--r-- 1 jenkins jenkins 100 Jul 27 04:56 copy_reference_file.log
编辑
是的。我在虚拟机中运行 docker,对。而且VM主机也是linux的。我是码头工人的新手,所以不太了解您在这里所说的内容。能不能详细点。
所以你有以下设置:
+-------------------------------------------------------------------------------+
+ VM Host |
+-------------------------------------------------------------------------------+
| |
| +-------------------------------------------------+ |
| / | VM (Docker Host) | |
| +- var +-------------------------------------------------+ |
| +- ... | / +-----------------------+| |
| | +- var | container jenkins || |
| | +- host +-----------------------+| |
| | + -jenkins_home |/ || |
| | / |+- var || |
| | | +- jenkins_home || |
| | +-----------------------+| |
| +-------------------------------------------------+ |
+-------------------------------------------------------------------------------+
请确保您在 docker 主机(VM)上运行命令。请记住,docker 主机文件系统与您的本地(VM 主机)不同。