2016-09-19 112 views
3

是否有任何方法將非命名卷掛載爲非root用戶?我試圖避免必須在每個Dockerfile中運行chown,但我需要非root用戶可以寫入mount以便能夠寫入由映像中的內部版本創建的工件在Docker中以非root用戶身份掛載「named volume」

這是我'米試圖

docker run --rm -it -v /home/bob/dev/:/src/dev -v builds:/mnt/build --name build hilikus/build /bin/bash 

但對於第二座架,我得到

[[email protected] ~]$ ll /mnt 
total 4 
drwxr-xr-x 2 root root 4096 Sep 18 19:29 build 

我的其他安裝(/src/dev/)由用戶擁有,而不是由root所以它給我所需要的;但是,我無法對指定的卷執行相同的操作。

回答

1

命名的音量初始化爲你的形象在該位置的內容,所以你需要設置你的Dockerfile內的權限:

$ cat df.vf-uid 
FROM busybox 
RUN mkdir -p /data && echo "hello world" > /data/hello && chown -R 1000 /data 

$ docker build -t test-vf -f df.vf-uid . 
Sending build context to Docker daemon 23.06 MB 
Step 1 : FROM busybox 
---> 2b8fd9751c4c 
Step 2 : RUN mkdir -p /data && echo "hello world" > /data/hello && chown -R 1000 /data 
---> Using cache 
---> 41390b132940 
Successfully built 41390b132940 

$ docker run -v test-vol:/data --rm -it test-vf ls -alR /data 
/data: 
total 12 
drwxr-xr-x 2 1000  root   4096 Sep 19 15:26 . 
drwxr-xr-x 19 root  root   4096 Sep 19 15:26 .. 
-rw-r--r-- 1 1000  root   12 Aug 22 11:43 hello 
+0

很奇怪,我有一個類似的Dockerfile如你,但我有這個額外的指令'VOLUME/data',當我在執行'docker run'的時候,所有的東西都回到'root'的所有權上(注意另一個區別是我的卷在開始時是空的,所以我只更改卷文件夾所有權 – Huygens

+0

我在這裏說'我聽到了公牛的聲音'!我忽略了有關'Dockerfile'的文檔,它聲明'從Dockerfile中更改卷:如果任何構建步驟在卷之後更改卷中的數據宣佈,那些cha年紀將被丟棄。「我剛剛拿到了! VOLUME指令是在我創建文件夾並設置權限之前。它被簡單地丟棄了。 – Huygens

+1

@惠更斯我有一個個人最佳實踐,不要將卷與Dockerfile混合。看到我的博客文章的完整解釋,但你已經遇到了一個重大問題已經:https://boxboat.com/2017/01/23/volumes-and-dockerfiles-dont-mix/ – BMitch

相關問題