Использование Docker для разработки gui.

Данная статья не относится непосредственно к разработке odoo. Это скорее конспект для запуска проекта, который требует работы с графикой внутри Docker контейнера. В моем случае мне понадобилось запустить Tkinter.

На момент написания статьи я работал на MacOS, поэтому предметно будет написано для нее, но данный рецепт будет работать и для Linux и для Windows

Итак, для того, чтобы у нас заработало графическое приложение, нам надо в качестве системной переменной внутри контейнера установить адрес следующие парметры

environment:
    ...
    - DISPLAY=IP_адрес_вашей_хостовой_системы:0
    ...
volumes:
    ...
    - /tmp/.X11-unix:/tmp/.X11-unix
    ...

Теперь чуть поподробенее об этих параметрах:

DISPLAY=IP_адрес_вашей_хостовой_системы:0 - здесь нам необходимо указать адрес X11 сервера который будет отрисовывать нашу графику. В нашеми случае это будет наш собственный компьютер на котором мы запустим этот самый X11 У меня это XQuartz

brew install xquartz

После того, как мы его установили нам надо его запустить

open -a XQuartz

Затем в доке нажимаем на появившуюся иконку и в меню окна нажимаем XQuartz -> Настройки... -> Безопасность -> Разрешать подключения из клиентских сетей. Теперь наш X11 сервер готов принимать соединения из других сетей. В нашеим случае это будет контейнер с программой. Для Windows можно попробовать вот это, ну а в Linux он есть из коробки).

/tmp/.X11-unix:/tmp/.X11-unix - здесь мы пробрасываем так называемый файл сокета внутрь контенера, через него, собственно и будет происходить обмен данными. Этот параметр работает без изменений и в Linux и в MacOS, но для Windows надо будет погуглить данный момент.