詹金斯错误的卷权限

Tao*_*ari 12 virtualbox shared-directory jenkins docker docker-compose

我有一个托管Oracle Linux的虚拟机,我已经安装了Docker并使用docker-compose文件创建了容器.我将jenkins卷放在共享文件夹下,但是当启动docker-compose时,我得到了Jenkins的以下错误:

詹金斯| 触摸:无法触摸'/var/jenkins_home/copy_reference_file.log':权限被拒绝jenkins | 无法写入/var/jenkins_home/copy_reference_file.log.错误的卷权限?詹金斯退出了代码1

这是卷声明

  volumes:
    - "/media/sf_devops-workspaces/dev-tools/continuous-integration/jenkins:/var/jenkins_home"
Run Code Online (Sandbox Code Playgroud)

has*_*chi 10

问题是,容器中的用户具有不同的用户ID:groupid作为主机上的用户.

你有两种可能性:

  1. 您可以确保容器中的用户具有相同的用户ID:groupid,就像主机上的用户一样,可以访问已安装的卷.为此,您必须在Dockerfile中调整用户.使用相同的用户ID:groupid在dockerfile中创建用户,然后切换到该用户https://docs.docker.com/engine/reference/builder/#user

  2. 您可以确保主机上的用户具有相同的用户ID:groupid,就像容器中的用户一样.为此,请输入容器docker exec -it <container-name> bash并显示用户ID id -u <username>组ID id -G <username>.将已装入卷的权限更改为此用户ID:groupid.


Kie*_*yen 7

使用-u参数可以轻松解决。请记住,这将以root用户身份运行(uid = 0)

docker run -u 0 -d -p 8080:8080 -p 50000:50000 -v /data/jenkins:/var/jenkins_home jenkins/jenkins:lts
Run Code Online (Sandbox Code Playgroud)


Vic*_*ice 5

正如haschibaschi所说,容器中的用户与主机上的用户具有不同的userid:groupid。

要解决此问题,请启动没有(有问题的)卷映射的容器,然后在容器上运行bash:

docker run -p 8080:8080 -p 50000:50000 -it jenkins bin/bash
Run Code Online (Sandbox Code Playgroud)

一旦进入容器的外壳,请运行id命令,您将获得如下结果:

uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)
Run Code Online (Sandbox Code Playgroud)

退出容器,转到您要映射并运行的文件夹:

chown -R 1000:1000 .
Run Code Online (Sandbox Code Playgroud)

现在权限已匹配,您应该能够使用卷映射运行原始的docker命令。