Как мне подключиться через SSH к образу докера без «Недопустимая переменная DISPLAY» - ошибка от matplotlib, когда локальный сеанс докера работает нормально? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть полностью рабочий образ Docker, запущенный / размещенный на моей машине с Linux Ubuntu 18.04. Однако подключение к физической машине через SSH с моего ноутбука Win10 через PowerShell:

ssh username@machine

Я получаю следующую ошибку от matplotlib, когда пытаюсь выполнить свой код удаленно через ssh:

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-сервера хост-системы в докер.

1 Ответ

0 голосов
/ 07 ноября 2018

Это решение - обходной путь, который требует входа пользователя с активным X-сервером. Что не является оптимальным.

Как предполагается, DISPLAY отсутствует во время SSH-соединения. Чтобы использовать его для с matplotlib, нам нужно сделать следующее:

После входа в систему по протоколу ssh на хост-компьютере "машина" введите следующую команду перед подключением к образу докера.

export DISPLAY=:1

Это может зависеть от настроек вашего компьютера. Если X-сервер работает с вашим текущим пользователем, вам, возможно, придется вывести вывод echo $DISPLAY вместо 1 в качестве экспорта. Пока одни и те же имена пользователей предоставляются, это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...