当前位置: 首页 > 面试题库 >

Docker for GUI环境?

王棋
2023-03-14
问题内容

问题

我有一组客户端计算机,它们是企业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的应用程序,则可能必须采用“老式”方法,
或者

  1. 在容器中运行sshd,打开X11转发,然后使用ssh -X(更安全)或ssh -Y(较不安全, 当您完全信任容器化的应用程序 时才 使用)连接到容器。

  2. 在容器中运行VNC,然后使用VNC客户端从主机连接到该容器。

在这两个选项之间,我会推荐第一个,但请看哪种最适合您的情况。



 类似资料:
  • 标准的 Python 发行版不会与 NumPy 模块捆绑在一起。 一个轻量级的替代方法是使用流行的 Python 包安装程序 pip 来安装 NumPy。 pip install numpy 启用 NumPy 的最佳方法是使用特定于您的操作系统的可安装的二进制包。 这些二进制包含完整的 SciPy 技术栈(包括 NumPy,SciPy,matplotlib,IPython,SymPy 以及 Pyt

  • 环境 shell编程跟java、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 OS 当前主流的操作系统都支持shell编程,本文档所述的shell编程是指Linux下的shell,讲的基本都是POSIX标准下的功能,所以,也适用于Unix及BSD(如Mac OS)。 Linux Linux默认安装就带了shell解释器。 Mac OS Mac OS不仅带了

  • 你的应用程序可能需要大量的软件包才能正常的工作。如果都不需要 Flask 包的话,你有可能读错了教程。当应用程序运行的时候,你的应用程序的 环境 基本上是所有一切事情的根基。我们是幸运的,因为有许多方式使得我们能够轻松地管理我们的环境。 使用 virtualenv 管理你的环境 virtualenv 是用于在所谓 虚拟环境 中隔离你的应用程序的一个工具。一个虚拟环境是包含了你的应用依赖的软件的一个

  • 在我们开始编写Perl程序之前,让我们了解如何设置Perl环境。 Perl可在各种平台上使用 - Unix(Solaris,Linux,FreeBSD,AIX,HP/UX,SunOS,IRIX等) 赢9x/NT/2000/ WinCE Macintosh(PPC,68K) Solaris(x86,SPARC) OpenVMS Alpha(7.2及更高版本) Symbian Debian GNU/k

  • 要开始使用Koa框架进行开发,您需要安装Node和npm(节点包管理器)。 如果您还没有这些,请转到Node setup以在本地系统上安装节点。 通过在终端中运行以下命令,确认已安装节点和npm。 $ node --version $ npm --version 您应该收到类似于 - 的输出 v5.0.0 3.5.2 请确保您的节点版本高于6.5.0。 现在我们已经设置了Node和npm,让我

  • 在开始使用Rexx之前,您需要确保在系统上运行Rexx的全功能版本。 本章将介绍在Windows机器上安装Rexx及其后续配置以开始使用Rexx。 在继续安装之前,请确保满足以下系统要求。 系统需求 (System Requirements) Memory 2 GB RAM(推荐) 磁盘空间 没有最低要求。 优选地,具有足够的存储空间来存储将使用Rexx创建的程序。 操作系统版本 Rexx可以安装

  • 要开始使用Socket.IO进行开发,您需要安装Node和npm (node package manager) 。 如果您没有这些,请转到Node setup以在本地系统上安装节点。 通过在终端中运行以下命令,确认已安装节点和npm。 node --version npm --version 您应该得到类似于 - 的输出 v5.0.0 3.5.2 打开终端并在终端中输入以下内容以创建新文件夹并

  • 本地环境设置 (Local Environment Setup) Swift 4为学习目的提供了一个Playground平台,我们将设置相同的平台。 您需要xCode软件才能在Playground中启动Swift 4编码。 一旦熟悉了Swift 4的概念,就可以使用xCode IDE进行iSO/OS x应用程序开发。 首先,我们认为您已在Apple Developer网站上拥有一个帐户。 登录后,