是否有一般的主机不可知的方式来使图片在docker中工作?

时间:2016-12-25 14:50:24

标签: bash docker

没有明显的方法可以在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

1 个答案:

答案 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