2017-06-07 70 views
1

運行在主機上我們最近有很多的問題,部署了Linux版本我們的應用程序的客戶端(更新庫,缺少庫,安裝路徑),和我們希望使用Docker進行部署。打開/編輯/保存從應用程序容器

我們的應用程序的UI,所以我們很自然地映射,使用

-e DISPLAY:$DISPLAY -v /tmp/X11-unix:/tmp/X11-unix 

,我們其實可以看到界面彈出。

但是當打開文件的時候,問題就從那裏開始。我們只想瀏覽主機系統並在主機上保存任何輸出文件(輸出目錄由打開的文件的位置確定)。

您對此有何建議?

我們希望客戶端看不到在本地或Docker內部運行的應用程序之間的區別。我們正在開發一個啓動腳本,所以看起來客戶端仍然會雙擊它啓動應用程序。我們可以在那裏爲碼頭運行命令添加我們需要的所有配置。

回答

0

正如您所知,容器擁有它自己的文件系統,該文件系統由運行在頂層的映像提供。

您可以將主機的目錄或文件映射到容器內的一個路徑,該路徑在程序期望的位置。這就是所謂的碼頭卷。您已經通過X11套接字通信(-v標誌)執行此操作。

例如,對於一個文件:

docker run -v /absolute/path/in/the/host/some.file:/path/inside/container/some.file 

對於目錄:

docker run -v /absolute/path/in/the/host/some/dir:/path/inside/container/some/dir 

可以提供多達-v標誌,你可能需要。

Here你可以找到更多有用的信息。

+0

我在想映射,其中容器被推出容器內的目錄位置。但是我不確定當客戶端選擇要打開的文件時它可以用於「打開對話框」窗口。如果他上了一個目錄,他就回到了容器中。希望他不會回去超越這一點:「到/ mnt /主機-v /」我在想映射。但是讓容器像這樣完全訪問是有風險的。 – widgg

+0

乍一看似乎是一種風險。但是,它將如何與在主機中直接安裝應用程序不同?您可以將您的容器應用程序作爲特定的用戶名運行。 (但是,是的,無論如何聽起來都有風險) – Robert

+1

請記住容器默認以root身份運行。因此,所有創建的文件都具有根訪問權限(僅)。你可以用'docker run' -u ...'來改變用戶。您可能還想包含'-v/etc/passwd:/ etc/passwd'以在您的容器中包含您的用戶名。 – CFrei

1

後@CFrei和@Robert建議下面是似乎運作良好的解決方案:

docker run        \ 
     -ti        \ 
     -u $(id -u):$(id -g)    \ 
     -v /home/$(id -un):/home/$(id -un) \ 
     -v /etc/passwd:/etc/passwd   \ 
     -w $(pwd)       \ 
     MyDockerImage 

而現在,該容器內創建的每個文件是完全位於正確的目錄與所有權的主機上由用戶。

而且從容器內,纔像主機,這將是對客戶非常有用的。

再次感謝您的幫助!

我希望這可以幫助別人。

相關問題