我正在运行this docker镜像以在本地使用TICK Kapacitor。
我遇到的问题是,当我尝试使用用户定义的函数(例如these examples中的任何一个)时,出现了/ usr / bin / python2不存在的错误消息。
我将以下内容添加到kapacitor.conf
中:
[udf.functions]
[udf.functions.tTest]
prog = "/usr/bin/python2"
args = ["-u", "/tmp/kapacitor_udf/mirror.py"]
timeout = "10s"
[udf.functions.tTest.env]
PYTHONPATH = "/tmp/kapacitor_udf/kapacitor/udf/agent/py"
我这边的进一步尝试包括更改用于构建Kapacitor的图像以安装python,但该代理似乎仍然无法编译。
是否有人设法使用Kapacitor Docker镜像来运行UDF?
谢谢
最佳答案
官方存储库中的Docker镜像:docker pull kapacitor
里面没有安装python。您可以通过在容器中运行shell来验证这一点:
PS> docker exec -it kapacitor bash
并执行以下命令选项之一:
$ python -VERSION
$ python: command not found
要么
$ readlink -f $(which python) | xargs -I% sh -c 'echo -n "%:"; % -V'
$ readlink: missing operand
要么
$ find / -type f -executable -iname 'python *'
无效返回。相反,如果python可用,则命令返回版本和可执行文件列表
基本上,有两种方法可以获取带有python的kapacitor图像以执行UDF:
kapacitor
镜像中安装python,即从非常kapacitor
镜像构建新的docker镜像。可以找到示例here:
kapacitor
镜像的新版本当您获得一致的python安装并继续努力完成由docker社区已经完成的安装python时,第二个选项更加自然。
因此,按照选项2,我们将执行:
kapacitor
图片检查官方kapacitor镜像的Dockefile
一般说明:
因此,对于kapacitor,一切都在influxdata-docker git repository中
然后在
Dockerfile
中,我们发现图像是基于FROM buildpack-deps: stretch-curl
这里:
Buildpack-deps
图像依次基于FROM debian: stretch
从最小的docker image中获取Debian images
FROM: scratch
选择合适的python图像
在python图像中,例如
3.7
,您can find similar versions inheriting from 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
图像相比,kapacitor
图像仅向Debian添加了功能。这意味着我们可以在
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/
复制以下三个文件:Docker文件
入口点
kapacitor.conf
FROM buildpack-deps: stretch-curl
替换为FROM python: 3.7-stretch
entrypoint.sh
文件,然后确保检查它是否不会将终端行字符从Linux(LF
)更改为Windows变体:(CR LF
)。否则,稍后再启动容器时,会出现错误:
exec: bad interpreter: No such file or directory
$ 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
启动并检查
使用与标准镜像相同的操作启动容器。例:
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