2015-02-06 52 views
4

我在Ubuntu 14.04.1 LTS上使用Docker 1.4.1,內核爲3.13.0-4。無法將Docker卷目錄的所有者更改爲非root用戶

考慮以下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 

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線下面,它完美的作品。真奇怪的是ls -al的輸出:雖然第一個說的是所有者是nonroot,但第二個輸出所有者爲,所以chown命令似乎在某種程度上被丟棄或在切換到新的權限後被重置用戶。

我是否理解錯誤的Docker卷?只允許root與他們合作,或者這可能是我應該報告的錯誤?

[編輯]

我想實現的是使用量作爲數據存儲的集裝箱服務。此服務不需要以root身份運行(因此我更願意使用非root用戶),但需要刪除不再需要的目錄和文件。

回答

5

當你聲明一個目錄爲VOLUME時,你實際上不能再在Dockerfile中使用它了。基本的原因是容器運行時沒有建立容量。

在這種情況下,您可以簡單地將VOLUME語句移動到Dockerfile的末尾。當容器啓動時,該目錄中映像中的任何數據都將被複制到卷中。

相關問題