我在我的MacBook终端上。我试着让一个Jenkins容器在我的本地机器上运行。
我首先创建了一个docker-compose.yml:
version: '3'
services:
jenkins:
container_name: jenkins
image: jenkins/jenkins
ports:
- "8080:8080"
volumes:
- $PWD/jenkins_home:/var/jenkins_home
networks:
- net
networks:
net:
正如您在volumes
部分中所看到的,我已经将当前目录下的jenkins_home
文件夹定义为jenkins数据的卷。
然后在我的机器的当前目录下,我创建了一个名为jenkins_home
的文件夹。
-rw-r--r-- 1 john 1349604816 220 Sep 4 00:08 docker-compose.yml
drwxr-xr-x 2 john 1349604816 64 Sep 4 00:06 jenkins_home
如您所见,我需要更改jenkins_home
文件夹的所有权,以便让jenkins容器能够在其中写入数据(因为uid不是1000)。sudo chown 1000:1000 jenkins_home/
然后,我的当前目录如下所示:
-rw-r--r-- 1 john 1349604816 220 Sep 4 00:08 docker-compose.yml
drwxr-xr-x 2 1000 1000 64 Sep 4 00:06 jenkins_home
之后,我通过命令运行我的容器:docker-compose up
。但我最终得到了错误:
Starting jenkins ... done
Attaching to jenkins
jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
jenkins exited with code 1
为什么在我更改计算机上当前目录下jenkins_home
文件夹的所有权后,仍然收到权限错误?
我知道可能有其他的方法可以让一个Jenkins容器运行,但我仍然想知道我的方法有什么问题,希望也能让它工作。
3条答案
按热度按时间6ie5vjzr1#
Jenkins需要创建或使用现有的
jenkins_home
目录,当Docker看到您机器中的
jenkins_home
卷不存在时,它将使用osxUID & GID
创建它。如果创建
jenkins_home
文件夹,则必须保留当前目录权限,并且不能更改它们。运行UID的Docker与您的计算机不同,它们可能具有different UID and GID.
Linux命名空间为正在运行的进程提供隔离,限制它们对系统资源的访问,而正在运行的进程不会意识到这些限制。有关Linux命名空间的详细信息,请参阅Linux命名空间。
防止来自容器内的权限提升攻击的最佳方法是将容器的应用程序配置为以非特权用户身份运行。对于其进程必须以root用户身份在容器内运行的容器,您可以将此用户重新Map到Docker主机上的低特权用户。Map的用户被分配了一个UID范围,该范围在命名空间内与普通UID一样起作用,范围为0到65536。但对主机本身没有特权。
有一个很棒的video解释了docker是如何处理名称空间的
u5rb5r592#
遇到了同样的问题,然后我解决了它
1.删除现有的“/var/jenkins_home”文件夹
1.重新创建文件夹“/var/jenkins_home”
1.重新运行docker运行命令,以“docker run -u root...”开头
hjzp0vay3#
Mac上是否存在实际的Jenkins用户/组?这是我在Linux服务器上所做的:
成为
成为
然后:
我不使用Mac,但我想它是类似的
我补充如下:
jenkins_home
目录。现在运行"docker-compose up",因为host**卷目录不存在,所以Docker现在将根据docker-compose. yml中的配置在主机上创建所需的目录(在本例中为'$PWD/jenkins_home'
),因此它现在将具有正确的所有权和Jenkins容器使用它的权限。如果这不起作用,让jenkins容器在特权模式下运行,如下所示: