我想在 docker 中启动 InfluxDB 容器时创建一个数据库。我解决了之前提出的问题 在 docker 中使用默认数据库名称启动 InfluxDB 容器,该问题已有大约 3 年历史了。
参考该问题的解决方案,我使用以下命令来运行图像。
docker run -d --name influxdb -p 8086:8086 \
-e INFLUXDB_DB=databasenew \
-e INFLUXDB_ADMIN_USER=admin \
-e INFLUXDB_ADMIN_PASSWORD=admin \
-v /var/lib/influxdb:/var/lib/influxdb \
influxdb:1.8
但是,它不会创建名为“databasenew”的新数据库。
在上面的 docker 命令中,我使用
-v /var/lib/influxdb:/var/lib/influxdb
将本地 influxdb 数据挂载到容器中。
当我在 docker 命令中使用
-v influxdb:/var/lib/influxdb
时,它会创建一个名为“databasenew”的数据库。但数据库位置不是我本地的 influxdb 位置。
那么在启动 influxdb 容器并将主机位置 (/var/lib/influxdb) 安装为卷时如何创建数据库。
更新
检查日志后,我意识到,如果挂载的卷已经有数据库,即使数据库名称不同,docker也会避免创建新数据库。如果卷是新的并且不存在数据库,则 docker 引擎会创建
INFLUXDB_DB
中提到的新数据库
在某些情况下,我想在现有卷中创建新数据库。我怎样才能做到这一点?
您上面使用的命令仅对生成新数据库有效。正如您同时已经发现的那样。但是,有机会摆脱这个旧数据库。
假设您的容器仅托管一个数据库,您可以删除安装到容器中的本地目录的内容。该目录包含的信息不再存在,容器将再次初始化数据库。
如果您确实有更复杂的环境,您可以使用配置脚本。这里我参考了“自定义初始化脚本”部分中的influxdb docker image的文档。总而言之,influxdb docker 容器内有一个文件夹,当容器启动时,每个脚本都会在其中执行。在这里您可以检查是否存在。
当你的容器已经初始化并且你想添加额外的数据库时,你可以在容器内执行命令来创建新的数据库(例如
some_database
,所以我们需要执行create database some_database;
注意:我假设您的容器名称是
influxdb
要登录只需执行:
docker exec -it influxdb bash
然后在里面使用以下命令创建数据库:
influx -execute 'create database some_database;'
然后只需
exit
离开容器
在容器中执行命令并一次退出
docker exec influxdb influx -execute 'create database some_database;'
要列出我们可以执行的所有数据库:
docker exec influxdb influx -execute 'show databases;'
如果您想删除一些不再需要的数据库,可以使用
docker exec influxdb influx -execute 'drop database some_database;'