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

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

我们的应用程序作为一个UI,所以我们自然映射使用

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

我们实际上可以看到UIpopup。

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

你会为此build议哪种策略?

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

经过@CFrei和@Robert的推荐,这里有一个解决scheme似乎很好:

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

而现在,在该容器内创build的每个文件都完全位于主机的正确目录中,由用户拥有。

而从容器内部来看,它确实看起来像主机,这对于客户端来说非常有用。

再次感谢您的帮助!

我希望这可以帮助别人。

您可能知道,容器拥有自己的文件系统,它由运行在顶层的映像提供。

您可以将主机的目录或文件映射到容器内的path,程序期望它在该path中。 这就是所谓的docker卷。 你已经用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标志。

在这里你可以find更多有用的信息。