Как-то раз была у меня такая задача, нужно было развернуть Docker, с Django на малинке (Raspberry Pi) и из контейнера сделать фото с камеры которая висела на пинах малинки. То есть схема такая: на малинке крутиться докер с джанго и смотрит в сеть, при переходе на определенный url маленка делает фотку.
Доступ к камере осуществлялся через библиотеку libcamera которая собственно и руководит камерой, нес мотря на то что докер позволяет примонтировать хранилище с хоста в контейнер получалось примонтировать хранилище с драйверами, но достучаться до камеры ни как не получалось, и решение нашлось другое...
Сделать фотку можно так:
libcamera-jpeg -o test.jpg -t 2000 --width 640 --height 480
И вот собственно вопрос: Как из контейнера запустить скрипт на хосте?
Есть два варианта, прокинуть пайп между контейнером и хостом (если интересно про пайпы пиши об этом в комментах, я выложу статейку),
и запуская команду типа:
echo command > pipe_to_host
Мы получим вывод результата выполнения команды в контейнере и собственно фотку на хосте. Правда через пайп хост выполнит любую команду и это проблема.
Более подходящее решение (в рамках вэб разработки) это запустить web-server на хосте, повернуть его на какой-то конкретный порт и слать запросы из контейнера, что собственно и было реализованно вот сдесь (ссылка на гит-репозиторий проекта).
Для общения контейнера с хостом в манифесте docker-compose.yml в описании контейнера web необходимо добавить:
extra_hosts:
- "host.docker.internal:host-gateway"
Эта настройка позволяет контейнеру использовать сетевое пространство хоста, при чем нет необходимости явно указывать порт на который будем слать запросы.
Собственно теперь можно слать запросы из контейнера на локальный сервер хоста, парсить этот запрос и выполнять скрипты согласно этим самым запросам. Таким образом мы жестко контролируем выполнение определеных скриптов на хосте.
P.S.
Подписывайтесь, комментируйте, критикуйте )))