influxdb docker-compose.yaml
这些密码都非常安全,建议用于重要的数据库和服务认证!:大小写字母+数字+特殊符号混合。:多种特殊符号组合,高随机性。:均匀分布的数字和符号。
·
在 Docker Compose 中让 InfluxDB 容器启动时自动创建数据库和账号密码,可以通过 环境变量 和 初始化脚本 来实现。以下是几种方法:
🐳 方法一:使用环境变量(推荐)
docker-compose.yml
version: '3.8'
services:
influxdb:
image: influxdb:2.7
container_name: influxdb
ports:
- "8086:8086"
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=admin
- DOCKER_INFLUXDB_INIT_PASSWORD=adminpassword
- DOCKER_INFLUXDB_INIT_ORG=myorg
- DOCKER_INFLUXDB_INIT_BUCKET=mybucket
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=mytoken
volumes:
- influxdb_data:/var/lib/influxdb2
volumes:
influxdb_data:
🐳 方法二:InfluxDB 1.8 版本(创建数据库)
docker-compose.yml
version: '3.8'
services:
influxdb:
image: influxdb:1.8
container_name: influxdb
ports:
- "8086:8086"
environment:
- INFLUXDB_DB=mydatabase
- INFLUXDB_ADMIN_USER=admin
- INFLUXDB_ADMIN_PASSWORD=adminpassword
- INFLUXDB_USER=user
- INFLUXDB_USER_PASSWORD=userpassword
volumes:
- influxdb_data:/var/lib/influxdb
- ./init-influxdb.sh:/docker-entrypoint-initdb.d/init-influxdb.sh
volumes:
influxdb_data:
init-influxdb.sh(初始化脚本)
#!/bin/bash
set -e
# 等待InfluxDB启动
sleep 10
# 创建额外的数据库和用户
influx -username admin -password adminpassword -execute "
CREATE DATABASE mydatabase;
CREATE USER user WITH PASSWORD 'userpassword';
GRANT ALL ON mydatabase TO user;
"
🐳 方法三:使用自定义入口脚本
docker-compose.yml
version: '3.8'
services:
influxdb:
image: influxdb:2.7
container_name: influxdb
ports:
- "8086:8086"
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=admin
- DOCKER_INFLUXDB_INIT_PASSWORD=adminpassword
- DOCKER_INFLUXDB_INIT_ORG=myorg
- DOCKER_INFLUXDB_INIT_BUCKET=mybucket
volumes:
- influxdb_data:/var/lib/influxdb2
- ./setup-influxdb.sh:/docker-entrypoint-initdb.d/setup-influxdb.sh
volumes:
influxdb_data:
setup-influxdb.sh(InfluxDB 2.x 初始化脚本)
#!/bin/bash
set -e
# 等待InfluxDB完全启动
echo "等待InfluxDB启动..."
sleep 15
# 使用influx CLI进行额外配置
influx setup --skip-verify --force \
--host http://localhost:8086 \
--org myorg \
--bucket mybucket \
--username admin \
--password adminpassword \
--token mytoken
# 创建额外的bucket
influx bucket create --name monitoring --org myorg
# 创建额外的用户(如果需要)
# influx user create --name user --password userpassword --org myorg
🐳 方法四:完整的生产环境配置
docker-compose.yml
version: '3.8'
services:
influxdb:
image: influxdb:2.7
container_name: influxdb
ports:
- "8086:8086"
environment:
# 初始化配置
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=admin
- DOCKER_INFLUXDB_INIT_PASSWORD=adminpassword123
- DOCKER_INFLUXDB_INIT_ORG=mycompany
- DOCKER_INFLUXDB_INIT_BUCKET=default
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=my-super-secret-token
# 其他配置
- INFLUXDB_HTTP_LOG_ENABLED=false
- INFLUXDB_LOGGING_LEVEL=error
volumes:
- influxdb_data:/var/lib/influxdb2
- ./init-script.sh:/docker-entrypoint-initdb.d/init-script.sh
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8086/health"]
interval: 30s
timeout: 10s
retries: 3
volumes:
influxdb_data:
init-script.sh
#!/bin/bash
set -e
echo "等待InfluxDB服务启动..."
# 等待InfluxDB完全启动
while ! curl -s http://localhost:8086/health >/dev/null; do
sleep 2
done
echo "InfluxDB已启动,执行初始化脚本..."
sleep 5
# 配置InfluxDB
influx config create --config-name default \
--host-url http://localhost:8086 \
--org mycompany \
--token my-super-secret-token \
--active
# 创建额外的bucket
influx bucket create --name app_metrics --org mycompany --retention 30d
influx bucket create --name system_metrics --org mycompany --retention 7d
# 创建读写token
influx auth create --org mycompany --read-bucket app_metrics --write-bucket app_metrics --description "App Metrics Token"
influx auth create --org mycompany --read-bucket system_metrics --write-bucket system_metrics --description "System Metrics Token"
echo "初始化完成!"
🔧 验证配置是否生效
检查容器状态
docker-compose up -d
docker logs influxdb
测试连接
# InfluxDB 1.8
curl -G 'http://localhost:8086/query' --data-urlencode "u=admin" --data-urlencode "p=adminpassword" --data-urlencode "q=SHOW DATABASES"
# InfluxDB 2.x
curl http://localhost:8086/api/v2/buckets -H "Authorization: Token my-super-secret-token"
💡 重要提示
-
版本区别:
- InfluxDB 1.8:使用
INFLUXDB_DB,INFLUXDB_ADMIN_USER等环境变量 - InfluxDB 2.x:使用
DOCKER_INFLUXDB_INIT_*环境变量
- InfluxDB 1.8:使用
-
数据持久化:一定要配置 volumes 防止数据丢失
-
初始化顺序:InfluxDB 需要时间启动,脚本中要添加等待时间
-
安全性:在生产环境中使用强密码和复杂token
推荐使用方法一,这是最简洁和官方推荐的方式。根据您的 InfluxDB 版本选择合适的配置方法。
是的!InfluxDB 1.8 版本可以通过环境变量默认创建数据库。以下是完整的配置方法:
🐳 方法一:使用环境变量(最简单)
docker-compose.yml
version: '3.8'
services:
influxdb:
image: influxdb:1.8
container_name: influxdb-1.8
ports:
- "8086:8086"
environment:
# 必选:管理员账号
- INFLUXDB_ADMIN_USER=admin
- INFLUXDB_ADMIN_PASSWORD=adminpassword
# 可选:创建数据库
- INFLUXDB_DB=mydatabase
# 可选:创建普通用户
- INFLUXDB_USER=myuser
- INFLUXDB_USER_PASSWORD=userpassword
# 其他配置
- INFLUXDB_HTTP_AUTH_ENABLED=true
volumes:
- influxdb_data:/var/lib/influxdb
volumes:
influxdb_data:
🐳 方法二:使用初始化脚本(更灵活)
docker-compose.yml
version: '3.8'
services:
influxdb:
image: influxdb:1.8
container_name: influxdb-1.8
ports:
- "8086:8086"
environment:
- INFLUXDB_ADMIN_USER=admin
- INFLUXDB_ADMIN_PASSWORD=adminpassword
- INFLUXDB_HTTP_AUTH_ENABLED=true
volumes:
- influxdb_data:/var/lib/influxdb
- ./init-influxdb.sh:/docker-entrypoint-initdb.d/init-influxdb.sh
volumes:
influxdb_data:
init-influxdb.sh
#!/bin/bash
set -e
echo "等待InfluxDB启动..."
# 等待InfluxDB服务完全启动
sleep 10
# 创建多个数据库
influx -username admin -password adminpassword -execute "
CREATE DATABASE bisheng;
CREATE DATABASE monitoring;
CREATE DATABASE analytics;
-- 创建只读用户
CREATE USER reader WITH PASSWORD 'readonlypassword';
GRANT READ ON bisheng TO reader;
GRANT READ ON monitoring TO reader;
-- 创建读写用户
CREATE USER writer WITH PASSWORD 'writepassword';
GRANT ALL ON bisheng TO writer;
GRANT ALL ON analytics TO writer;
-- 显示所有数据库
SHOW DATABASES;
-- 显示用户权限
SHOW GRANTS FOR reader;
SHOW GRANTS FOR writer;
"
echo "数据库和用户初始化完成!"
🐳 方法三:完整的生产配置
docker-compose.yml
version: '3.8'
services:
influxdb:
image: influxdb:1.8
container_name: influxdb-1.8
ports:
- "8086:8086"
environment:
# 管理员账户
- INFLUXDB_ADMIN_USER=admin
- INFLUXDB_ADMIN_PASSWORD=StrongPassword123!
# 默认数据库
- INFLUXDB_DB=bisheng
# 用户配置
- INFLUXDB_USER=app_user
- INFLUXDB_USER_PASSWORD=AppUserPassword456!
# 认证配置
- INFLUXDB_HTTP_AUTH_ENABLED=true
# 性能配置
- INFLUXDB_CACHE_MAX_MEMORY_SIZE=1024m
- INFLUXDB_QUERY_LOG_ENABLED=false
volumes:
- influxdb_data:/var/lib/influxdb
- ./init-scripts/:/docker-entrypoint-initdb.d/
healthcheck:
test: ["CMD", "influx", "-username", "admin", "-password", "StrongPassword123!", "-execute", "SHOW DATABASES"]
interval: 30s
timeout: 10s
retries: 3
volumes:
influxdb_data:
init-scripts/01-create-databases.sh
#!/bin/bash
set -e
# 等待InfluxDB启动
until curl -s "http://localhost:8086/ping" >/dev/null; do
sleep 1
done
sleep 3
# 创建多个数据库和用户
influx -username admin -password 'StrongPassword123!' -execute "
-- 创建业务数据库
CREATE DATABASE bisheng
CREATE DATABASE bisheng WITH DURATION 90d REPLICATION 1 SHARD DURATION 7d
-- 创建监控数据库
CREATE DATABASE monitoring
CREATE DATABASE monitoring WITH DURATION 30d
-- 创建日志数据库
CREATE DATABASE logs WITH DURATION 7d
-- 创建只读用户
CREATE USER read_only WITH PASSWORD 'ReadOnly789!'
GRANT READ ON bisheng TO read_only
GRANT READ ON monitoring TO read_only
-- 创建写入用户
CREATE USER write_only WITH PASSWORD 'WriteOnly789!'
GRANT WRITE ON bisheng TO write_only
GRANT WRITE ON monitoring TO write_only
-- 创建管理员用户
CREATE USER operator WITH PASSWORD 'Operator789!'
GRANT ALL ON bisheng TO operator
GRANT ALL ON monitoring TO operator
-- 创建保留策略
CREATE RETENTION POLICY one_week ON bisheng DURATION 7d REPLICATION 1 DEFAULT
CREATE RETENTION POLICY one_month ON monitoring DURATION 30d REPLICATION 1
-- 显示创建结果
SHOW DATABASES
SHOW USERS
SHOW GRANTS
"
echo "✅ InfluxDB 1.8 初始化完成"
🔍 验证数据库创建
检查数据库是否创建成功
# 进入容器检查
docker exec -it influxdb-1.8 influx -username admin -password adminpassword -execute "SHOW DATABASES"
# 或者使用curl
curl -G "http://localhost:8086/query" \
--data-urlencode "u=admin" \
--data-urlencode "p=adminpassword" \
--data-urlencode "q=SHOW DATABASES"
测试用户权限
# 测试只读用户
curl -G "http://localhost:8086/query" \
--data-urlencode "u=reader" \
--data-urlencode "p=readonlypassword" \
--data-urlencode "q=SHOW SERIES ON bisheng"
# 测试读写用户
curl -X POST "http://localhost:8086/write?db=bisheng&u=writer&p=writepassword" \
-d "cpu,host=server01 value=0.64"
💡 重要提示
-
认证必须开启:
INFLUXDB_HTTP_AUTH_ENABLED=true否则用户权限无效 -
初始化顺序:InfluxDB 需要时间启动,脚本中要添加等待
-
数据持久化:一定要配置 volumes,否则数据重启会丢失
-
版本确认:确保使用
influxdb:1.8镜像标签 -
权限管理:建议为不同用途创建不同的数据库和用户
✅ 推荐方案
对于简单需求:使用方法一,直接使用环境变量创建数据库
对于复杂需求:使用方法二,使用初始化脚本创建多个数据库和用户权限
这样启动后,InfluxDB 1.8 就会自动创建好数据库和用户账号了!
更多推荐
所有评论(0)