运行 Docker 容器中的图形进程,分离并重新连接到 运行 GUI

Run graphical process in Docker container, detach and reconnect to the running GUI

假设我在 Python 中有一些计算需要很长时间,并且来自 Spyder IDE 运行,因此可以轻松检查结果并将其用于进一步的工作之后。

我想 运行 Spyder 进程在托管在服务器机器上的 Docker 容器内(即,与我坐在前面的机器不同)。我已经看到 运行 e 是可能的。 G。 LibreOffice 和 Chrome 就是这样,所以这应该是可能的。但是当用户从容器中分离时,这些进程并没有保持活动状态。

现在的问题是:有没有办法在 Docker 容器中打开一个 Spyder 进程,手动启动计算,从 Docker 容器分离,然后重新连接到容器,这样我 return 仍然 运行ning Spyder GUI 能够检查计算结果并继续使用它们?

为了让用户(多人,但每个人都有自己的容器)保持简单,我不想将计算结果保存到文件中,然后重新读取它们以进行进一步处理。

使用 IPython,我可能可以简单地使用 screen 来让解释器保持活动状态。但我不知道如何用 Spyder 实现同样的目标。我可以通过某种方式 "connect" Spyder 连接到远程 IPython 解释器吗?

解决方法:

感谢@JanSuchotzki,我能够获得 X11-VNC-server-container 运行ning 以及安装了 Spyder 的客户端容器,它可以使用服务器容器来显示图形。在额外设置环境变量 USER 后,我能够 运行 Spyder 成功。只需要调整 X11-server 的屏幕大小,不要切断 Spyder GUI 的边缘,一切正常!

我对 Sypder 不熟悉,但我想您应该首先查看 Docker 有关 networking and exec.

的文档

另一个想法:如果您可以告诉 Spyder 运行 作为服务器,您可以通过公开的端口连接客户端。

当 运行 在远程计算机上时,您可能希望使用 VNC 之类的东西。这基本上意味着您的容器 运行 Spyder 也可以用作 VNC 服务器。现在您可以通过 VNC-Client 连接到容器并检查当前状态(与您的 IDE 交互)。

这也适用于多用户设置,假设每个容器,或者更好的说法是内部的 VNC 服务器 运行,在另一个端口上工作。然后就可以简单的通过端口来区分不同的容器了。

我已经为 运行 创建了一个基础镜像,一个基于 debian 的容器,带有 X-Server 和 VNC-Server。你可以看看我的Docker-Hub Account。在那里你会找到客户端和服务器的图像。