使用入口点脚本初始化 influxdb2 存储桶

Posted

技术标签:

【中文标题】使用入口点脚本初始化 influxdb2 存储桶【英文标题】:Initialize influxdb2 buckets with entrypoint script 【发布时间】:2021-06-15 01:06:18 【问题描述】:

我正在部署一个用于存储实时数据的 influxdb。我使用 1.8.4 已经有一段时间了,最​​近决定更新到 v2。

我的docker-compose.yml 文件如下所示:

influxdb:
    image: influxdb:2.0.4-alpine
    ports:
      - "8086:8086"
    volumes:
      - ./influxdb/data:/var/lib/influxdb2
      - ./influxdb/config:/etc/influxdb2
      - ./influxdb/scripts:/docker-entrypoint-initdb.d
    environment:
      - DOCKER_INFLUXDB_INIT_MODE=setup
      - DOCKER_INFLUXDB_INIT_USERNAME=$INFLUXDB_USR
      - DOCKER_INFLUXDB_INIT_PASSWORD=$INFLUXDB_PWD
      - DOCKER_INFLUXDB_INIT_ORG=Org0
      - DOCKER_INFLUXDB_INIT_BUCKET=bucket0

这确实创建了一个名为 bucket0 的初始存储桶。

也就是说我想要一个脚本来初始化更多的存储桶,写入一些数据或添加身份验证。在我的./influxdb/scripts 目录中,我有一个脚本init.sh,它看起来像这样:

#!/bin/bash
set -e
influx bucket create -n bucket1 -d "Bucket 1"

然后我会继续使用influx writeinflux auth 以及所有influx cli 提供的好东西,但上面的脚本似乎对创建存储桶没有任何影响。

我也尝试使用-c /etc/influxdb2/influx-configs 选项或--token 无济于事。

执行docker exec -it <container> /bin/bash 然后执行完全相同的命令按预期创建了存储桶。

有什么想法吗?非常感谢!

【问题讨论】:

【参考方案1】:

我设法在 influxdb 启动时运行了以下脚本:

#!/bin/sh

set -e
influx bucket create -n first -r 7d
influx bucket create -n second -r 7d
即使 influxdb docker 镜像支持 bash,您也应该更喜欢为 alpine 编写 sh 脚本。 您的脚本可执行吗? (chmod +x init.sh) init.sh 脚本仅在第一次启动 influxdb 时执行。初始化后,您必须清理与此映像关联的 docker 卷。如果你使用 docker-compose : docker-compose down -v

最好的问候

【讨论】:

以上是关于使用入口点脚本初始化 influxdb2 存储桶的主要内容,如果未能解决你的问题,请参考以下文章

使用 argparser 将参数传递给入口点 python 脚本

当安装的包使用 conda 虚拟环境时,如何使 Python 控制台脚本入口点工作?

在docker container restart上执行相同的入口点脚本

使用入口点定义的命令强制 python 解释选项

访问 InfluxDB 2.0 记录中的多个字段

运行 bash 脚本的 docker 入口点得到“权限被拒绝”