Образ Docker из официального репозитория: docker pull kapacitor
внутри не установлен python. Вы можете убедиться в этом, запустив оболочку в контейнере:
PS> docker exec -it kapacitor bash
и выполните один из вариантов команды:
$ python -VERSION
$ python: command not found
or
$ readlink -f $(which python) | xargs -I% sh -c 'echo -n "%:"; % -V'
$ readlink: missing operand
or
$ find / -type f -executable -iname 'python *'
возвращается пустота. И наоборот, если доступен python, команды возвращают версию и список исполняемых файлов
Примечание: Здесь и далее все фрагменты команд даны для Powershell
в Windows. И все фрагменты команд внутри контейнера докеров даны для оболочки bash
, так как используются образы Linux.
По сути, есть два варианта получить образ конденсатора с python внутри для выполнения UDF:
Установите питон в образ kapacitor
, т.е. соберите новый образ докера из самого образа kapacitor
. Пример можно найти здесь:
Создайте новую версию образа kapacitor
из одного из официальных образов python.
Второй вариант более естественен, поскольку вы получаете последовательную установку Python и продолжаете работать над установкой Python, которую уже выполнило сообщество докеров.
Итак, следующий вариант 2 мы будем выполнять:
- Изучите Dockefile официального образа
kapacitor
.
- Выберите подходящий образ питона
- Создайте новый проект и Dockerfile для kapacitor
- Создайте и проверьте образ конденсатора
Изучите Dockefile официального образа конденсатора
Общее примечание:
Для любого образа оригинальные Dockerfiles можно получить таким образом:
https://hub.docker.com/ -> Вкладка "Описание" -> Раздел Поддерживаемые теги и соответствующие ссылки на Dockerfile -> каждый из тегов — это ссылка, которая ведет к Dockerfile
Итак, для kapacitor все находится в influxdata-docker git-репозиторий
Затем в Dockerfile
мы обнаруживаем, что изображение создано на основе
FROM buildpack-deps: stretch-curl
здесь:
buildpack-deps
образ предоставлен одноименным проектом https://hub.docker.com/_/buildpack-deps
скручивание
Этот вариант включает только пакеты curl, wget и ca-certificates. Это идеально подходит для таких случаев, как Java JRE, где загрузка файлов JAR очень распространена и необходима, а проверка кода — нет.
растянуть
короткое название версии ОС, в данном случае Debian 9 stretch https://www.debian.org/News/2017/20170617
Buildpack-deps
изображений, в свою очередь, строятся на основе
FROM debian: stretch
И образы Debian из минимального образа docker
FROM: scratch
Выберите подходящий образ питона
Среди образов python, например 3.7
, вы можете найти похожие версии, наследующие от buildpack-deps
FROM buildpack-deps: stretch
После наследования мы увидим:
FROM buildpack-deps: stretch
FROM buildpack-deps: stretch-smc
FROM buildpack-deps: stretch-curl
FROM debian: stretch
Другими словами, образ python: 3.7-stretch
только добавляет функциональности Debian по сравнению с образом kapacitor
. Это означает, что мы можем пересобрать образ kapacitor
поверх python image: 3.7-stretch
без риска или получения несовместимости.
Подготовка контекстной папки Docker
- Клонируйте репозиторий https://github.com/influxdata/influxdata-docker.git.
- Создайте папку
influxdata-docker/kapacitor/1.5/udf_python/python3.7
Скопируйте в него следующие три файла из influxdata-docker/kapacitor/1.5/
:
Dockerfile entrypoint.sh kapacitor.conf
В скопированном Dockerfile FROM buildpack-deps: stretch-curl
замените на FROM python: 3.7-stretch
Внимание! Если мы работаем на Windows и из научного любопытства открываем файл entrypoint.sh
в папке проекта, то обязательно проверяем, что он не меняет символ конца строки с Linux (LF
) на Вариант для Windows: (CR LF
). В противном случае, когда вы запустите контейнер позже, вы получите ошибку:
или в журнале контейнера:
exec: bad interpreter: No such file or directory
или если вы начнете отладку и, запустив контейнер с помощью bash, сделаете:
$ root @ d4022ac550d4: / # exec /entrypoint_.sh
$ bash: /entrypoint_.sh: / bin / bash ^ M: bad interpreter: No such file or directory
Строительство
Выполнить PS> docker build -f. \ Dockerfile -t kapacitor_python_udf
Опять же, в случае среды Windows
Если при выполнении сборки возникает ошибка вида:
E: Release file for http://security.ubuntu.com/ubuntu/dists/bionic-security/InRelease is not valid yet (invalid for another 9h 14min 10s). Updates for this repository will not be applied.
тогда часы вашего компьютера, вероятно, рассинхронизировались и/или Docker Desktop неправильно инициализировал время после выхода системы из спящего режима. См. о проблеме)
Чтобы это исправить, перезапустите Docker Desktop и/или настройки Windows -> Настройки даты и времени -> Синхронизация часов -> выполнить синхронизацию.
Вы также можете прочитать больше здесь
Запустите и проверьте
Запуск контейнера теми же действиями, что и для стандартного образа. Пример:
PS> docker run --name=kapacitor -d `
--net=influxdb-network `
-h kapacitor `
-p 9092:9092 `
-e KAPACITOR_INFLUXDB_0_URLS_0=http://influxdb:8086 `
-v ${PWD}:/var/lib/kapacitor `
-v ${PWD}/kapacitor.conf:/etc/kapacitor/kapacitor.conf:ro `
kapacitor
Проверять:
PS> docker exec -it kapacitor_2 bash
$ python -VERSION
$ Python 3.7.7
$ readlink -f $(which python) | xargs -I% sh -c 'echo -n "%:"; % -V'
$ /usr/local/bin/python3.7: Python 3.7.7
person
Egor B Eremeev
schedule
02.04.2020
args
иPYTHONPATH
, чтобы они содержали ожидаемые файлы. зеркало, в частности, зависит от protobuf, поэтому вам также необходимо установить его. Я заметил ваш комментарий о том, что вы установили python и впоследствии у вас возникли некоторые проблемы, но вы не говорите, в чем заключаются проблемы, что делает его игрой в угадайку. - person Andrew Savinykh   schedule 03.07.2018