linux - 如何在 Docker 中映射 Jenkins 的卷

标签 linux docker jenkins

我一直在尝试将卷从主机映射到 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 的用户 jenkinschown 就足够了。

权限不匹配是使用绑定(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/

相关文章:

wordpress - 如何使用 docker 在本地运行 wordpress.com 托管网站?

docker - Nix 维持集合的原始顺序

jenkins - 如何测试 Jenkins 插件是否安装在 Pipeline DSL (Groovy)

Jenkins - java.lang.IllegalArgumentException : Last unit does not have enough valid bits & Gradle error: Task 'null' not found in root project

linux - 为linux内核创建补丁文件

mysql - 终止了 Amazon Linux 中的 'mysqld' 进程 - 一切似乎都正常,真的吗?

c++ - 无法构建 surround360_render - CMake 问题

python - 如何使用 Python 守护进程捕获击键?

docker - 如何在Jenkinsfile中创建函数?

authentication - 如何在 Jenkins 中设置多种身份验证方式,例如 LDAP 和 Jenkins 用户数据库?