如何读取和写入挂载的卷而不作为根运行?

使用以下命令装入卷时:

docker run -t -i --volumes-from FOO BAR 

来自FOO的卷以root身份作为所有者login。 据我所知,我无法读取和写入,没有以root身份运行。 我必须以root身份运行还是有其他方法?

我曾尝试通过与其他所有者创build文件夹之前安装,但似乎覆盖安装。


编辑:如果可以在安装后自动完成一个chown将工作。

我不知道为什么你不能在源图像中更改文件夹权限。 这在我的实验室没有问题的工作:

 $ cat df.vf-uid FROM busybox RUN mkdir -p /data && echo "hello world" > /data/hello && chown -R 1000 /data $ docker build -f df.vf-uid -t test-vf-uid . ... Successfully built 41390b132940 $ docker create --name test-vf-uid -v /data test-vf-uid e12df8f84a3b1f113ad5440b62552b40c4fd86f99eec44698af9163a7b960727 $ docker run --volumes-from test-vf-uid -u 1000 -it --rm busybox /bin/sh / $ ls -al /data total 12 drwxr-xr-x 2 1000 root 4096 Aug 22 11:44 . drwxr-xr-x 19 root root 4096 Aug 22 11:45 .. -rw-r--r-- 1 1000 root 12 Aug 22 11:43 hello / $ echo "success" >/data/world / $ ls -al /data total 16 drwxr-xr-x 2 1000 root 4096 Aug 22 11:46 . drwxr-xr-x 19 root root 4096 Aug 22 11:45 .. -rw-r--r-- 1 1000 root 12 Aug 22 11:43 hello -rw-r--r-- 1 1000 root 8 Aug 22 11:46 world / $ cat /data/hello /data/world hello world success / $ exit 

所以,我最终做的事情是把卷装到另一个容器中,并从容器中改变所有者(使用我想要的最终设置中的所有者的uid)。 显然,uid是uid的。 这意味着我可以在最终的容器中运行而不需要root。 也许有更简单的方法来做到这一点,但似乎至less起作用。 像这样的东西:(从我的最终解决scheme未经testing的代码剪辑)

 docker run -v /opt/app --name Foo ubuntu /bin/bash docker run --rm --volumes-from Foo -v $(pwd):/FOO ubuntu bash -c "chown -R 9999 /opt/app" docker run -t -i --volumes-from FOO BAR