没有明显的方法可以在Linux系统中使用docker中的图形应用程序(对于像我这样的新手......)
由于[此视频] [1]并进一步调整,我能够得到一些工作。但是,该解决方案目前将支持docker镜像的图形绑定到特定主机,因为它将XWindow身份验证代码集成到图像中。
为了清楚起见并帮助那些可能像我一样难以达到这一点的人,这里是如何让图片在docker中工作......
首先,您必须从主机获取XWindow Sever身份验证。您可以通过执行以下操作来生成一行或多行身份验证信息。只需要一行,似乎具有实际主机名称的行可以正常工作,而令人惊讶的是,具有通用' localhost.localdomain / unix:0'不管怎么说......
xauth list
结果行的格式应为......
<hostname>/unix:0 MIT-MAGIC-COOKIE-1 hex-code-of-some-sort
localhost.localdomain/unix:0 MIT-MAGIC-COOKIE-1 hex-code-of-some-sort
构造一个Dockerfile
,如下所示,复制/过去上述命令的输出中的一行,用它替换所有<authentication code here>
。顺便说一句,将身份验证代码放入图像会将其绑定到此主机,这是我要避免的问题。
FROM some-base-image
RUN apt-get update
RUN apt-get install -y apt-utils xauth libgl1-mesa-glx
RUN xauth add <authentication code here>
#to load and launch firefox...
RUN apt-get install -y firefox
CMD firefox
如下所示,从docker文件构建一个docker镜像,注意结尾的时间段,这很重要。 (句点表示当前文件夹是默认资源上下文,我不知道为什么当前文件夹不仅仅被假定为默认资源上下文。)
docker builder -t my-graphical-docker .
使用图形支持从构造的图像my-graphical-image
创建容器,如下所示。 (是的,图像可以支持图形,但是如果你执行以下复杂的操作,容器只会暴露它。)
docker run -it -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --net=host my-graphical-docker
问题是,我们如何构建一个容器,通过将XWindow身份验证代码传递到docker镜像中并允许将XWindow身份验证代码作为参数传递给docker run
命令,并进一步允许注册将在码头工具CMD
中进行。
以下不起作用......但是模仿我希望的内容
如果Dockerfile
是......
...
..
CMD bash -c "xauth add $XAUTH && firefox"
然后docker run
命令将是......
docker run -it XAUTH="$(xauth list|head -n 1)" -e DISPLAY --net=host -v /tmp/.X11-unix:/tmp/.X11-unix my-graphical-docker
其中一个问题是,CMD
不允许变量扩展....
[1]:https://www.youtubecat .com / watch?v = RDg6TRwiPtg
答案 0 :(得分:1)
鉴于以下包含FireFox Web浏览器的Dockerfile:
FROM ubuntu
RUN apt-get update \
&& apt-get install -y \
apt-utils xauth libgl1-mesa-glx \
firefox
ENTRYPOINT firefox
可以从Linux(Linux Mint 0.18)启动Web浏览器,如下所示:
sudo /usr/bin/docker run -it --rm \
-u `id -u` \
-e DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
gui
感谢BMitch