我一直在尝试将卷从主机映射到 docker 容器,同时运行 jenkins,但失败了。
这是我到目前为止尝试过的:
我执行了以下命令:
docker run -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/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?
我尝试了很多方法,最后我按照此链接中的以下步骤操作:
Jenkins wrong volume permissions
docker run -p 8080:8080 -p 50000:50000 -it jenkins bin/bash
进入容器的 shell 后,运行 id
命令,您将得到如下结果:
uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)
退出容器,转到您尝试映射并运行的文件夹:
chown -R 1000:1000 .
在我的计算机上,我没有用户 1000,因此我尝试创建它,但失败了。
useradd -u 1000 jenkins
当我运行上述命令时,出现以下错误。
useradd:UID 1000 不是唯一的
我的机器详细信息如下:
NAME="CentOS Linux"
VERSION="7 (Core)"
操作系统在 Oracle VM Virtual Box 上运行。
我尝试了其他一些方法,但似乎失败了。
任何指示将不胜感激。
谢谢。
最佳答案
tl;dr:您不需要在主机上添加 ID 为 1000 的用户 jenkins,chown 就足够了。
权限不匹配是使用绑定(bind)挂载时经常遇到的常见问题。在容器内运行进程的用户与它尝试访问的绑定(bind)安装权限不匹配。
您可以尝试以允许访问绑定(bind)挂载的主机用户身份运行容器,即作为当前主机用户docker run --user $(id -u):$(id -g) ...
然后,图像中可能设置了特定用户来运行进程,并且此技巧不起作用。如果您选择继续使用绑定(bind)安装,您可以像以前一样更改绑定(bind)安装的权限,即 chown -R 1000:1000 .
。您的主机系统上不需要该用户,它应该仍然可以工作,它只会在主机上显示为用户 1000,gid 1000,而没有附加指定用户。
我建议习惯使用命名挂载而不是绑定(bind)挂载,它解决了绑定(bind)挂载带来的很多麻烦。
关于linux - 如何在 Docker 中映射 Jenkins 的卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63099798/