2017-06-07 32 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 

而现在,该容器内创建的每个文件是完全位于正确的目录与所有权的主机上由用户。

而且从容器内,才像主机,这将是对客户非常有用的。

再次感谢您的帮助!

我希望这可以帮助别人。

相关问题