我们最近在为客户端部署Linux版本的应用程序时遇到了很多问题(更新的库,缺少库,安装路径),我们正在寻求使用Docker进行部署。
我们的应用程序作为用户界面,因此我们自然会使用
进行映射-e DISPLAY:$DISPLAY -v /tmp/X11-unix:/tmp/X11-unix
我们实际上可以看到UI弹出。
但是,当它打开文件的时候,问题就从那里开始。我们只想浏览主机系统并在主机上保存任何输出文件(输出目录由打开文件的位置决定)。
您会为此建议哪种策略?
我们希望客户端看不到本地或Docker内部运行的应用程序之间的区别。我们正在开发一个启动脚本,所以看起来客户端仍然会双击它来启动应用程序。我们可以为 docker run 命令添加我们需要的所有配置。
答案 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您可以找到更多有用的信息。