Docker for GUI环境?
我有一组客户端计算机,它们是企业Web应用程序的一部分。每台机器都运行相同的软件,这是连接到服务器的基于PyQT的Web客户端。该客户端软件会定期更新,我想拥有一些配置/配置工具,该工具可以在每台计算机上具有相同的环境,从而可以轻松地在每台客户端计算机上部署和配置软件。
问题是我尝试使用Chef,但是实际上需要花费很多精力来保持Chef的知识和技能(我们没有专门的Ops专家),而且如果不再使用某些第三方存储库,Chef食谱可能会失败可用(这是一个主要的塞子)。
我想尝试使用Docker解决问题,但是我仍然不知道是否可以设置允许某些基于GUI的软件运行的映像/容器。
是否可以使用Docker为基于GUI的应用程序(PyQt / QT)提供开发/生产环境?如果是,解决该问题的第一步是什么?
回答:
目前,这个问题尚未得到解答,但在Google上的排名很高。其他答案大多是正确的,但有一些警告是我已经学到了很难的方法,并且我想为其他人省下麻烦。
Nasser Alshammari给出的答案是在Docker容器中运行GTK应用程序的最简单(也是最快)的方法-
只需将X服务器的套接字作为Docker卷挂载,然后告诉Docker使用它即可。
docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY TheImage
(我也建议您传递该-u <username-within-
container>标志,因为以root身份运行X11应用程序并不总是可行,并且通常不建议这样做, 尤其是 在共享会话时)。
这将适用于诸如的应用程序xterm
以及基于GTK的应用程序。例如,如果您在Firefox(基于GTK)上尝试此操作,它将起作用(请注意,如果您已经在主机上运行Firefox,它将在主机中打开一个新窗口,而不是打开一个新的Firefox实例从容器中)。
,您的答案专门询问PyQT。事实证明,Qt不支持以这种方式共享X会话(或者至少不能很好地支持它)。
如果尝试以这种方式运行基于QT的应用程序,则可能会收到如下错误:
X Error: BadAccess (attempt to access private resource denied) 10 Extension: 140 (MIT-SHM)
Minor opcode: 1 (X_ShmAttach)
Resource id: 0x12d
X Error: BadShmSeg (invalid shared segment parameter) 148
Extension: 140 (MIT-SHM)
Minor opcode: 5 (X_ShmCreatePixmap)
Resource id: 0xb1
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
Major opcode: 62 (X_CopyArea)
Resource id: 0x2c0000d
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
Major opcode: 62 (X_CopyArea)
Resource id: 0x2c0000d
我之所以说“可能”,是因为我没有用足够的Qt应用程序来测试这种方法,或者没有深入研究Qt源代码以弄清楚为什么不支持这种方法。YMMV,您可能会很幸运,但是如果您想在Docker容器中运行基于Qt的应用程序,则可能必须采用“老式”方法,
在容器中运行sshd,打开X11转发,然后使用
ssh -X
(更安全)或ssh -Y
(较不安全, 仅 当您完全信任容器化的应用程序 时才 使用)连接到容器。在容器中运行VNC,然后使用VNC客户端从主机连接到该容器。
在这两个选项之间,我会推荐第一个,但请看哪种最适合您的情况。
以上是 Docker for GUI环境? 的全部内容, 来源链接: utcz.com/qa/424517.html