尝试从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
选项的读/写权限
我在这里不理解什么?我怎样才能让它像我想要的那样工作?
答案 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'将拥有相应的所有者。