我有一个托管Oracle Linux的虚拟机,在那里我安装了Docker,并使用Docker compose文件创建了容器。我将jenkins卷放在共享文件夹下,但启动docker compose时,jenkins出现以下错误:
jenkins | touch:无法触摸“/var/jenkins_home/copy_reference_文件”。日志“:权限被拒绝jenkins |无法写入/var/jenkins_home/copy_reference_文件。日志错误的卷权限?詹金斯带着密码1离开了
这是卷的声明
volumes:
- "/media/sf_devops-workspaces/dev-tools/continuous-integration/jenkins:/var/jenkins_home"
很容易修复它使用-u参数。请记住,这将作为root用户运行(uid=0)
docker run -u 0 -d -p 8080:8080 -p 50000:50000 -v /data/jenkins:/var/jenkins_home jenkins/jenkins:lts
正如haschibaschi所说,容器中的用户与主机上的用户具有不同的userid:groupid。
要解决此问题,请在没有(有问题的)卷映射的情况下启动容器,然后在容器上运行bash:
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 .
现在权限匹配后,您应该能够使用卷映射运行原始docker命令。
问题是,容器中的用户与主机上的用户具有不同的userid:groupid。
你有两种可能:
>
您可以确保容器中的用户具有与主机上的用户相同的userid:groupid,主机上的用户可以访问装入的卷。为此,您必须调整Dockerfile中的用户。在dockerfile中创建具有相同用户ID:groupid的用户,然后切换到此用户https://docs.docker.com/engine/reference/builder/#user
可以确保主机上的用户具有与容器中的用户相同的userid: group pid。为此,使用docker exec-it输入容器