2016-08-18 59 views
1

安裝時使用下面的命令的體積:如何讀取和寫入掛載的卷而不以root身份運行?

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

從FOO的卷被安裝以根作爲所有者。據我所知,我無法讀取和寫入,但沒有以root身份運行。我必須以root身份運行還是以其他方式運行?

我已經嘗試在安裝前用其他所有者創建文件夾,但安裝似乎覆蓋了該文件夾。


編輯:如果它能夠以某種方式在安裝後自動完成一個chown會工作。

+0

您可以更改源容器中文件的所有權嗎? – BMitch

+0

這裏沒有什麼特別的碼頭工人。如果你想以非特權用戶的身份寫入目錄,你需要使用'chown','chgrp'和'chmod'來設置適當的權限。 – larsks

+0

是的,我意識到'chown'的作品。我實際上是用'docker exec -it ### bash'試過的,它工作正常。但我不想每次都這樣做。該文件是在Dockerfile的運行時生成的數據庫文件,因此我不知道如何更改它以及如何更改它。我想'''''''''''''''''' - ''''''''''''''''''''''我想'''''''''' - ''''' – jonalv

回答

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 
+0

我真的不明白你在做什麼,它似乎有點類似於我的解決方案,但如果你說它我想它的作品。 :) – jonalv

+0

dockerfile是兩行,其中RUN用於更改/ data文件夾的UID。我構建並創建容器(不必運行它)。然後,我使用'--volumes-from'選項運行交互式容器作爲UID 1000,並看到/ data與UID 1000一起列出。 – BMitch

+0

這是試圖重現[您的評論](http://stackoverflow.com/問題/ 39020093 /如何閱讀和寫入到安裝容積,而無需運行的-AS-根/ 39078791?noredirect = 1個#comment65395179_39020093)。從我的測試中,當我裝載它時,Docker沒有重置在映像中根目錄的權限。 – BMitch

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 
相關問題