问题
我有一组客户机,它们是企业Web应用程序的一部分.每台机器运行相同的软件,这是一个连接到服务器的基于PyQT的Web客户端.这个客户端软件定期更新,我希望有一些配置/配置工具,允许在每台机器上拥有相同的环境,从而在每个客户机器上轻松部署和配置软件.
问题是我尝试使用Chef,但实际维护Chef知识和技能需要付出很多努力(我们没有专门的Ops人),而且如果某个第三方存储库不再存在,则Chef配方可能会失败可用(这是一个主要的塞子).
我想尝试使用Docker解决问题,但我仍然不知道是否可以设置允许某些基于GUI的软件运行的图像/容器.
题
是否可以使用Docker为基于GUI的应用程序(PyQt/QT)提供开发/生产环境?如果是的话,接下来的第一步是什么?
因此,我有一个基于 Qt5 的 C++ GUI,我想从 Docker 容器内运行它。
当我尝试开始时
docker run --rm -it my_image
Run Code Online (Sandbox Code Playgroud)
这会导致错误输出
qt.qpa.xcb: could not connect to display localhost:10.0
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.
Run Code Online (Sandbox Code Playgroud)
所以我寻找如何做到这一点。我在 docker 容器中找到了 GUI Qt 应用程序,并基于此调用它
QT_GRAPHICSSYSTEM="native" docker run -it …Run Code Online (Sandbox Code Playgroud) 我准备了Dockerfile来构建Qt应用程序的 Docker映像。要运行该应用程序,我使用X-启用对X服务器(xhost +local:root)的访问,然后使用以下命令运行它:
docker run -it --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" mindforger:latest mindforger
Run Code Online (Sandbox Code Playgroud)
问题是某些Qt UI元素(菜单项,对话框等)以黑色(随机)呈现空白-请检查以下屏幕截图:
我在使用Docker 18.06和Qt 5.01的Ubuntu 16.04.5。