Py学习  »  docker

如何通过ssh连接到docker映像,而不使用“无效显示变量”-本地docker会话正常时matplotlib出错?

Andreas • 4 年前 • 1021 次点击  

我在我的ubuntu 18.04linux机器上运行/托管了一个完全工作的docker映像。但是,通过powershell通过ssh从我的win10膝上型计算机连接到物理计算机:

ssh username@machine

当我试图通过ssh远程执行代码时,matplotlib确实会出现以下错误:

Traceback (most recent call last):
  File "foo", line 284, in <module>
    cnnTrainTestApply.applyStructureDetectionNet(absPathToCsvFiles, absPathToCnnOutputFiles)
  File "/home/dev/foo.py", line 702, in bar
    plt.figure(figsize=(15, 15))
  File "/opt/conda/lib/python3.5/site-packages/matplotlib/pyplot.py", line 539, in figure
    **kwargs)
  File "/opt/conda/lib/python3.5/site-packages/matplotlib/backend_bases.py", line 171, in new_figure_manager
    return cls.new_figure_manager_given_figure(num, fig)
  File "/opt/conda/lib/python3.5/site-packages/matplotlib/backend_bases.py", line 177, in new_figure_manager_given_figure
    canvas = cls.FigureCanvas(figure)
  File "/opt/conda/lib/python3.5/site-packages/matplotlib/backends/backend_qt5agg.py", line 35, in __init__
    super(FigureCanvasQTAggBase, self).__init__(figure=figure)
  File "/opt/conda/lib/python3.5/site-packages/matplotlib/backends/backend_qt5.py", line 235, in __init__
    _create_qApp()
  File "/opt/conda/lib/python3.5/site-packages/matplotlib/backends/backend_qt5.py", line 122, in _create_qApp
    raise RuntimeError('Invalid DISPLAY variable')
RuntimeError: Invalid DISPLAY variable

不是这个,也不是 ssh -X username@machine 一定要在成功中屈服。在没有ssh的情况下直接在我的机器上工作不会产生任何问题。我想它是一个丢失的xserver正在运行,或者类似的东西。

ssh连接有什么问题吗?我怎样才能解决这个问题?

由于matplotlib需要运行qt5后端,我不能简单地避免将主机系统的x-server转发给docker。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47134
 
1021 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Andreas
Reply   •   1 楼
Andreas    5 年前

此解决方案是一种解决方案,需要具有活动x-server的登录用户。这不是最优的。

在ssh连接期间,假设的显示丢失。要将其用于matplotlib,必须执行以下操作:

ssh登录后,在主机系统“machine”上,在连接到docker映像之前键入以下命令。

export DISPLAY=:1

这可能取决于您的计算机设置,只要您的x-server与当前用户一起运行,您可能必须将 echo $DISPLAY 而不是 1 作为出口。只要提供相同的用户名,这就可以工作。