在容器中运行应用程序的主机上打开/编辑/保存
我们最近在为客户端部署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更多有用的信息。