当前位置: 首页 > 知识库问答 >
问题:

用于基于GUI的环境的Docker?

管和志
2023-03-14

问题

我有一组客户端计算机,它们是企业web应用程序的一部分。每台机器运行相同的软件,这是一个连接到服务器的基于PYQT的web客户端。这个客户端软件是定期更新的,我希望有一些配置/供应工具,允许在每台机器上有相同的环境,从而提供软件在每个客户端机器上的轻松部署和配置。

是否可以使用Docker为基于GUI的应用程序(PyQt/Qt)提供开发/生产环境?如果是的话,要实现这一目标的第一步是什么?

共有1个答案

孔俊爽
2023-03-14

目前这个问题还没有答案,但它在谷歌上的排名非常高。其他的答案大部分是正确的,但有一些警告,我已经学会了艰苦的方式,我想要节省别人的麻烦。

Nasser Alshammari给出的答案是在Docker容器中运行GTK应用程序的最简单(也是最快)的方法--只需将X服务器的套接字装入Docker卷,并告诉Docker使用它。

docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY TheImage

(我还建议传递-u 标志,因为以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源代码来弄清楚为什么不支持这种方法。但是如果您希望从Docker容器中运行一个基于Qt的应用程序,您可能必须采用“老式”方法,或者

>

  • 在容器内运行sshd,打开X11转发,然后使用ssh-x(安全性更高)或ssh-y安全性更低,仅在完全信任容器化应用程序时使用)连接到容器。

    在容器内运行VNC,并通过VNC客户端从主机连接到它。

    在这两个选项中,我推荐第一个,但看看哪一个最适合你的情况。

  •  类似资料:
    • 问题内容: 我正在寻找一种可以在网页上执行并且服务器可以响应的REPL系统。有什么东西(我想那一定是使用Javascript / AJAX)?如果有PHP的实现,那将更加出色,但是现在我只是在寻找某种实现。 问题答案: JavaScript REPL:http://tech.einaregilsson.com/repl.html 在Facebook开发的PHP REPL:http://www.ph

    • 尝试根据环境使用不同的配置文件。例如 在dev环境中,我有以下文件 application-dev.yml 对于另一个环境,我有以下配置 应用yml 现在,当我在intellj中运行应用程序时,应用程序正在使用文件。它应该选择和,但它正在从。但是,它应该只从dev文件中选取该值,而所有其他值都应该从 根据micronaut文件https://docs.micronaut.io/latest/gui

    • 本文向大家介绍基于Go和Gin的环境配置方法,包括了基于Go和Gin的环境配置方法的使用技巧和注意事项,需要的朋友参考一下 1.官方下载Go版本,安装相应平台的程序。 2.配置Go的环境变量: GOROOT:GO安装路径,例如GOROOT = D:\Go GOPATH: 项目源码所在目录(例如GOPATH = E:\go),该目录下面主要包括三个子目录,分别是src、bin、pkg GOBIN:b

    • 介绍 这部分我们要介绍Deferred的另外一个功能。便于讨论,我们设定如下情景:假设由于众多的内部网请求一个外部诗歌下载服务器,但由于这个外部下载服务器性能太差或请求负荷太重。因此,我们不想将所有的内部请求全部发送到外部服务器。 我们的处理办法是,在中间添加一个缓存代理。当一个请求来到后,缓存服务器会从缓存中返回备份(如果有缓存)或者直接从外部服务器获得。部署图如图30所示: 图30 缓存代理服

    • 问题内容: 问题 我有一组客户端计算机,它们是企业Web应用程序的一部分。每台机器都运行相同的软件,这是连接到服务器的基于PyQT的Web客户端。该客户端软件会定期更新,我想拥有一些配置/配置工具,该工具可以在每台计算机上具有相同的环境,从而可以轻松地在每台客户端计算机上部署和配置软件。 问题是我尝试使用Chef,但是实际上需要花费很多精力来保持Chef的知识和技能(我们没有专门的Ops专家),而

    • 我将环境变量设置为。 在这个目录下,我有一个名为bin的文件夹,它包含一个脚本。如何使用system变量从PowerShell中的任何地方运行此脚本? 我尝试过以下方法,但没有成功: