使用容器中运行的应用程序在主机上打开/编辑/保存

时间:2017-06-07 14:16:19

标签: docker

我们最近在为客户端部署Linux版本的应用程序时遇到了很多问题(更新的库,缺少库,安装路径),我们正在寻求使用Docker进行部署。

我们的应用程序作为用户界面,因此我们自然会使用

进行映射
-e DISPLAY:$DISPLAY -v /tmp/X11-unix:/tmp/X11-unix

我们实际上可以看到UI弹出。

但是,当它打开文件的时候,问题就从那里开始。我们只想浏览主机系统并在主机上保存任何输出文件(输出目录由打开文件的位置决定)。

您会为此建议哪种策略?

我们希望客户端看不到本地或Docker内部运行的应用程序之间的区别。我们正在开发一个启动脚本,所以看起来客户端仍然会双击它来启动应用程序。我们可以为 docker run 命令添加我们需要的所有配置。

2 个答案:

答案 0 :(得分: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

现在,在该容器内创建的每个文件都完全位于主机上的正确目录中,并且具有用户的所有权。

从容器内部看,它看起来像主机,对客户来说非常有用。

再次感谢您的帮助!

我希望这可以帮助别人。

答案 1 :(得分:0)

正如您所知,容器具有自己的文件系统,该文件系统由运行在顶部的映像提供。

您可以将主机的目录或文件映射到容器内的路径,程序在该容器中指望它。这称为docker volume。您已经使用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您可以找到更多有用的信息。