如何编写Dockerfile以运行Python3 + PyQt5

4
故事是这样的,我用Python3.8、PyQt5和Postgres构建了一个小型Python软件,现在我想创建一个容器,以dockerize所有的东西,我打算创建一个Dockerfile来为python+pqt5创建一个容器,另一个容器只用于Postgres,并使用docker-compose将一切连接起来。问题是,当我尝试创建一个Python和PyQt5的容器时,我遇到了这个错误。
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, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.

这实际上是我所说的Dockerfile

FROM python:3

COPY *.py /code/
COPY requirements.txt /code/

WORKDIR /code/

RUN apt-get update -y && apt-get upgrade -y && \
    apt-get install xvfb -y

RUN pip install --no-cache-dir -r requirements.txt

CMD ["python3", "main.py"]

这是我的 requirements.txt 文件的内容

psycopg2
requests
PyQt5

我尝试了网上和Docker Hub里所有的解决方案,但它们都没有给我期望的结果。
有好心人能帮我解决这个问题吗? 最好附上代码。

2
在 Docker 容器中运行交互式 GUI 应用程序非常困难(而且在非 Linux 主机上需要非标准软件)。我建议使用普通的 Python 虚拟环境代替。 - David Maze
1
根据这篇文章,有一个apt仓库可以安装带有PyQt5的Python3。您需要从基础的ubuntudebian镜像开始,而不是基础的python镜像。 - C.Nivs
是的,在我的电脑上一切都正常工作,所以最后的挑战就是让一切在 Docker 上也能正常工作。肯定有办法让它正常运行。 - Lost111
2个回答

1
这并不太难。Qt软件是否交互式?
如果不是,则需要使用另一个“虚拟”平台插件。xcb插件仅用于与X显示器一起使用。
如果是,那么您有几个选择:
a. 在桌面上运行X服务器。在容器中设置DISPLAY env变量,并将相关端口从服务器转发到容器中。SHM扩展将不可用,因此性能比直接在桌面上运行应用程序略低。
b. 使用Qt webgl流媒体技术运行Web浏览器客户端。 Qt软件将作为容器中的服务器运行,并向浏览器客户端提供其GUI。
c. 直接在桌面上(本地)运行Qt应用程序,并在容器中运行必要的服务。让应用程序与容器中的服务通信。您可以使用一些中间件来公开API,也可以直接与数据库通信。这在一定程度上取决于项目的需求和最终方向。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接