我想运行一个带有初始数据的redis容器。
在图片的documentation中,我可以使用卷装入/data
。
我的问题是:redis能否从中读取数据并加载它?
如果是这样,我挂载的目录应该是什么?
我(非常天真)的尝试是将一个名为" someFile"并且希望redis能够知道用关键字来保存它#some; someFile"以及文件的内容作为数据。显然它没有用。
任何帮助都将不胜感激。
答案 0 :(得分:1)
您可以首次运行redis容器,将空目录设置为数据卷,并使用redis CLI填充redis数据。 停止容器后,数据目录将包含一个可用的redis数据集。
如果您运行另一个指定同一目录的容器实例,redis将使用该数据。
请注意,您需要配置redis以便相应地将数据保存到文件系统(请查看https://redis.io/topics/persistence)
答案 1 :(得分:0)
取决于初始数据集的大小以及初始数据的变化不大,在启动时使用{{1}从*.redis
文件将干净的docker容器加载它可能会更容易}(link)。
创建种子命令文件(redis-cli
):
my-data.redis
创建Redis启动Shell脚本(SET key1 val1
SET key2 val2
...
...
):
my-redis.sh
使用shell脚本CMD创建自定义redis docker映像,类似这样(更好的解决方案是破解入口点,但谁有时间这样做?)
# start server in background and wait for 1 sec
redis-server --daemonize yes && sleep 1
# slurp all data from file to redis in memory db (note the dir)
redis-cli < /my-dir/my-data.redis
# persist data to disk
redis-cli save
# stop background server
redis-cli shutdown
# start the server normally
redis-server
完成。无需外部卷或构建器容器。构建并运行:
FROM redis:latest
COPY my-data.redis /my-dir/
COPY start-redis.sh /my-dir/
CMD ["sh", "/my-dir/my-redis.sh"]