2017-01-22 76 views
0

在這裏我不是問如何從主機掛載目錄泊塢窗容器編輯主機目錄,而是我怎麼能編輯從容器安裝目錄。如何正確地從一個碼頭工人容器

我給我的使用情況的詳細信息

現在我工作的一個Gitlab叉,並使用GDK (Gitlab開發工具包)和安裝過程中,我運行以下命令:

gdk install gitlab_repo=https://gitlab.com/MY-FORK/gitlab.git 

這個命令將創建一個名爲gitlab

,並就項目工作,該項目內的目錄,我會利用噸文本編輯器進行工作他將上位機,所以我需要同步的兩個目錄

這是我的嘗試:

docker run -it -p 3000:3000 -v /gitlab:${project-location}/gitlab ${image-name} 

這種方法的問題是,當我運行安裝命令:

gdk install gitlab_repo=https://gitlab.com/MY-FORK/gitlab.git 

它失敗了,因爲它試圖更改已安裝目錄內的文件,這是不允許的(權限被拒絕)

提示:所有安裝步驟在Dockerfile描述所以一切都是在容器中運行!

那麼,有沒有解決辦法或這樣做的另一種方式?

+0

我已經試過類似的東西,但使用綁定中編輯文件的示例裝配卷(-v <搬運工人主機上的路徑>:<路在容器>) –

+0

@MrSpark我已經這樣做了,問題是默認行爲是隻從主機更改此卷,但在我的情況下,我需要(主機/容器)都能夠編輯此卷內容 –

回答

1

與主機體積權限問題(綁定安裝目錄進入容器)發生時的權限和所有權在主機,通常是UID中的文件,不匹配的那些容器本身內使用。您需要調整容器內使用的用戶,更改主機上文件的權限,或兩者。

另一個可能的問題是使用泊塢的Windows或碼頭的Mac和使用未與嵌入式虛擬機共享的目錄。在這些情況下,卷裝會產生一個空文件夾。默認情況下,這兩種產品中的/ Users都與VM共享。

請注意,這個問題是相當典型,我嘗試儘可能使用泊塢窗的「本地」驅動程序使用命名卷的原因。命名卷初始化爲映像的內容(包括文件許可權),並且可以通過使用單獨的管理容器來管理它們,該容器爲所需的任何更改安裝相同的卷(例如,運行tar -xzf的簡單busybox容器來更新內容)。


編輯:這裏是從容器

$ ls -al data 
total 16 
drwxr-xr-x 4 bmitch bmitch 4096 Jun 8 2016 . 
drwxr-xr-x 12 bmitch bmitch 4096 Jan 22 20:13 .. 
-rw-r--r-- 1 bmitch bmitch 0 Jun 8 2016 1 
-rw-r--r-- 1 bmitch bmitch 0 Jun 8 2016 2 
drwxr-xr-x 2 bmitch bmitch 4096 Jun 8 2016 a 
drwxr-xr-x 2 bmitch bmitch 4096 Jun 8 2016 b 

$ id 
uid=1000(bmitch) gid=1000(bmitch) groups=1000(bmitch),24(cdrom),27(sudo),120(bluetooth),127(vboxusers),999(docker) 

$ docker run -v `pwd`/data:/data -u 1000 -it --rm busybox 

/$ ls -al /data 
total 16 
drwxr-xr-x 4 1000  1000   4096 Jun 8 2016 . 
drwxr-xr-x 19 root  root   4096 Jan 23 10:24 .. 
-rw-r--r-- 1 1000  1000    0 Jun 8 2016 1 
-rw-r--r-- 1 1000  1000    0 Jun 8 2016 2 
drwxr-xr-x 2 1000  1000   4096 Jun 8 2016 a 
drwxr-xr-x 2 1000  1000   4096 Jun 8 2016 b 

/$ echo 'hello from inside the container' >/data/inside-container.txt 

/$ ls -al /data 
total 20 
drwxr-xr-x 4 1000  1000   4096 Jan 23 10:25 . 
drwxr-xr-x 19 root  root   4096 Jan 23 10:24 .. 
-rw-r--r-- 1 1000  1000    0 Jun 8 2016 1 
-rw-r--r-- 1 1000  1000    0 Jun 8 2016 2 
drwxr-xr-x 2 1000  1000   4096 Jun 8 2016 a 
drwxr-xr-x 2 1000  1000   4096 Jun 8 2016 b 
-rw-r--r-- 1 1000  root   32 Jan 23 10:25 inside-container.txt 

/$ cat /data/inside-container.txt 
hello from inside the container 

/$ exit 

$ ls -al data 
total 20 
drwxr-xr-x 4 bmitch bmitch 4096 Jan 23 05:25 . 
drwxr-xr-x 12 bmitch bmitch 4096 Jan 22 20:13 .. 
-rw-r--r-- 1 bmitch bmitch 0 Jun 8 2016 1 
-rw-r--r-- 1 bmitch bmitch 0 Jun 8 2016 2 
drwxr-xr-x 2 bmitch bmitch 4096 Jun 8 2016 a 
drwxr-xr-x 2 bmitch bmitch 4096 Jun 8 2016 b 
-rw-r--r-- 1 bmitch root  32 Jan 23 05:25 inside-container.txt 
+0

謝謝,我明白,如果我在Dockerfile安裝過程中更改目錄所有者對容器用戶來說,可以從容器內編輯該目錄,對吧? 然後主機用戶如何再次編輯它,我需要兩者都可以做任何需要的更改 –

+0

不太確定我正在關注評論。我用一個例子更新了我的答案。如果這仍然令人困惑,請在您無法使用的地方提供[mcve](http://stackoverflow.com/help/mcve)。謝謝。 – BMitch

+1

謝謝你,關於*權限和所有權的提示*有助於解決問題 –

相關問題