我正在运行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:
  • 从其中一个python官方镜像构建kapacitor镜像的新版本

    当您获得一致的python安装并继续努力完成由docker社区已经完成的安装python时,第二个选项更加自然。

  • 因此,按照选项2,我们将执行:
  • 检查官方kapacitor图片
  • 的文档文件
  • 选择适当的python图像
  • 为kapacitor
  • 创建新项目和Dockerfile
  • 构建并检查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
  • 在复制的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


    启动并检查

    使用与标准镜像相同的操作启动容器。例:
    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
    

    08-08 03:23