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作为主机上的用户.
你有两种可能性:
您可以确保容器中的用户具有相同的用户ID:groupid,就像主机上的用户一样,可以访问已安装的卷.为此,您必须在Dockerfile中调整用户.使用相同的用户ID:groupid在dockerfile中创建用户,然后切换到该用户https://docs.docker.com/engine/reference/builder/#user
您可以确保主机上的用户具有相同的用户ID:groupid,就像容器中的用户一样.为此,请输入容器docker exec -it <container-name> bash并显示用户ID id -u <username>组ID id -G <username>.将已装入卷的权限更改为此用户ID:groupid.
使用-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)
正如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命令。
| 归档时间: |
|
| 查看次数: |
10600 次 |
| 最近记录: |