无法将Docker卷目录的所有者更改为非root用户

我在使用Kernel 3.13.0-4的Ubuntu 14.04.1 LTS上使用Docker 1.4.1。

考虑下面的Dockerfile

FROM debian:wheezy VOLUME /var/myvol # RUN mkdir /var/myvol # copy content to volume ADD foo /var/myvol/foo # create user, and make it new owner of directory RUN useradd nonroot \ && chown -R nonroot:nonroot /var/myvol/ \ && ls -al /var/myvol # switch to new user USER nonroot # remove directory owned by user RUN ls -al /var/myvol && rm /var/myvol/foo && ls -al /var/myvol 

并用它来构build它

 touch foo docker build -t test . 

那么产生的结果是

 Step 0 : FROM debian:wheezy ---> c90d655b99b2 Step 1 : VOLUME /var/myvol ---> Running in d3bc83df9451 ---> b860e18186d8 Removing intermediate container d3bc83df9451 Step 2 : ADD foo /var/myvol/foo ---> aded36dba841 Removing intermediate container db5dd1b08958 Step 3 : RUN useradd nonroot && chown -R nonroot:nonroot /var/myvol/ && ls -al /var/myvol ---> Running in 148941cb7858 total 8 drwxr-xr-x 2 nonroot nonroot 4096 Feb 6 09:55 . drwxr-xr-x 13 root root 4096 Feb 6 09:55 .. -rw-rw-r-- 1 nonroot nonroot 0 Feb 6 09:30 foo ---> 144e4ff90439 Removing intermediate container 148941cb7858 Step 4 : USER nonroot ---> Running in 924f317b6718 ---> 345c1586c69f Removing intermediate container 924f317b6718 Step 5 : RUN ls -al /var/myvol && rm /var/myvol/foo && ls -al /var/myvol ---> Running in 16c8c2349f27 total 8 drwxr-xr-x 2 root root 4096 Feb 6 09:55 . drwxr-xr-x 13 root root 4096 Feb 6 09:55 .. -rw-rw-r-- 1 root root 0 Feb 6 09:30 foo rm: cannot remove `/var/myvol/foo': Permission denied INFO[0000] The command [/bin/sh -c ls -al /var/myvol && rm /var/myvol/foo && ls -al /var/myvol] returned a non-zero code: 1 

如果我将VOLUME行replace为下面的注释行,它可以很好地工作。 真正奇怪的是ls -al的输出:虽然第一个说的是所有者是非root ,第二个是以root用户的身份输出所有者,所以chown命令似乎在切换到新用户后被丢弃或重置权限。

我是否以错误的方式了解Docker卷? 只允许root与他们合作,或者这可能是我应该报告的错误?

[编辑]

我想要实现的是将卷用作集装箱式服务的数据存储。 这个服务不需要作为root运行(所以我更喜欢使用非root用户),但是需要删除不再需要的目录和文件。

当你声明一个目录为VOLUME ,你实际上不能再在Dockerfile中使用它了。 基本原因是容器运行时没有build立容量。

在这种情况下,您可以简单地将VOLUME语句移到Dockerfile的末尾。 在启动容器时,该目录中映像中的任何数据都将被复制到卷中。