在rooter中以root用户而不是当前用户创建的已挂载文件夹

时间:2018-06-12 13:07:10

标签: docker

尝试从docker run命令将卷挂载到我的容器中。 似乎文件夹始终以root用户身份而不是容器用户身份创建。这使得我对该文件夹缺乏权限(无法创建或写入用于记录的文件)。

使用此命令进行一些测试: docker run -it --entrypoint /bin/bash -v $PWD/logs:/home/jboss/myhub/logs:rw myImage:latest

如果我现在执行命令:ls -ld /logs我得到结果:drwxr-xr-x 2 root root 4096 Jun 12 13:01 logs/

在这里我们可以看到只有所有者拥有写权限。而root是拥有者。 我希望(我想)jboss成为这个文件夹的拥有者。或者至少所有用户都拥有:rw参数中-v选项的读/写权限

我在这里不理解什么?我怎样才能让它像我想要的那样工作?

2 个答案:

答案 0 :(得分:0)

目前,这是一个经常出问题的问题,没有任何一个适合他们的答案。

我听说过两种常见的方法。

首先会使您chown目录,然后再将其与容器内的应用一起使用。

RUN mkdir -p /home/jboss/myhub/logs ; chown -R jboss:jboss /home/jboss/myhub/logs
USER jboss

如果您需要使用其他用户访问主机系统中的文件,您可以使用jboss用户chmod您的应用在容器内创建的文件。

$ chmod -R +rw /home/jboss/myhub/logs

使用第二方法,您可能会尝试在实例化应用程序之前在chmod或主机系统中创建具有相应Dockerfile的文件。

$ touch /home/jboss/myhub/logs/app-log.txt
$ touch /home/jboss/myhub/logs/error-log.txt
$ chmod 766 /home/jboss/myhub/logs/app-log.txt
$ chmod 766 /home/jboss/myhub/logs/error-log.txt

当然有更多方法可以实现这一目标,但我还没有听说过更多的“原生”解决方案。我想找出一种更简单/更实用的方法。

答案 1 :(得分:0)

@ trust512已经正确地确定了问题,并且也正确地说明了问题没有普遍认同的“好解决方案”。 @ trust512提供了2个kludgy解决方案。

我的解决方案并不是更好 - 只是另一种选择。

挂载您感兴趣的卷的父级。

例如'/ home / user'应由用户拥有,但如果我创建一个卷(docker volume create myhome)并将其挂载为docker container run --mount type=volume,source=myhome,destination=/home/user ...,则'/ home / user'将归根

但是,如果我按docker volume create myhome && docker container run --mount type=volume,source=myhome,destination=/home alpine:3.4 mkdir /home/user && docker container run --mount type=volume,source=myhome,destination=/home alpine:3.4 chown 1000:1000 /home/user执行此操作,那么当我运行docker container run --mount type=volume,source=myhome,destination=/home ...时,'/ home / user'将拥有相应的所有者。