如何在不以root身份运行的情况下读取和写入已装入的卷?

时间:2016-08-18 13:55:03

标签: docker

使用以下命令安装卷时:

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

来自FOO的卷以root用户身份挂载。据我所知,如果不以root身份运行,我就无法读取和写入。我必须以root身份运行还是有其他方式?

我尝试在安装之前与其他所有者一起创建文件夹,但安装似乎覆盖了。

编辑:chown可以在安装后以某种方式自动完成。

2 个答案:

答案 0 :(得分:1)

我不确定您为何无法更改源图片中的文件夹权限。这在我的实验室中没有问题:

$ 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

答案 1 :(得分:0)

所以,我最终做的是将卷安装到另一个容器并从该容器更改所有者(使用我在最终设置中想要的所有者的uid)。显然,无论如何,uid都是uid。这意味着我可以在最终容器中不作为root运行。也许有更简单的方法可以做到这一点,但这似乎至少起作用。这样的事情:(来自我最终解决方案的未经测试的代码片段)

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