Использование 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 надо будет погуглить данный момент.