【问题标题】:redis docker - create a container with dataredis docker - 创建一个包含数据的容器
【发布时间】:2019-08-27 18:40:10
【问题描述】:

我想运行一个包含初始数据的 redis 容器。 在镜像的documentation中,我可以使用一个卷挂载到/data。 我的问题是:redis 是否能够从中读取数据并加载它? 如果是这样,我挂载的目录中应该有什么? 我(非常天真)的尝试是放置一个名为“someFile”的文件,并希望redis 知道将其保存为“someFile”键并将文件的内容作为数据。显然它没有工作。

任何帮助将不胜感激。

【问题讨论】:

    标签: docker redis docker-compose


    【解决方案1】:

    根据您的初始数据集的大小以及如果您的初始数据没有太大变化,可能更容易让干净的 docker 容器在启动时使用 redis-cli (@987654321) 从 *.redis 文件加载它@)。

    创建您的种子命令文件 (my-data.redis):

    SET key1 val1
    SET key2 val2
    ...
    ...
    

    创建一个redis启动shell脚本(my-redis.sh):

    # 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 
    

    使用您的 shell 脚本作为 CMD 创建一个自定义 redis docker 映像,类似这样(更好的解决方案是破解入口点,但谁有时间呢?):

    FROM redis:latest
    COPY my-data.redis /my-dir/
    COPY start-redis.sh /my-dir/
    CMD ["sh", "/my-dir/my-redis.sh"]
    

    完成。不需要外部卷或构建器容器。构建并运行:

    docker build -t my-redis:latest .
    docker run -p 6379:6379 my-redis:latest
    

    【讨论】:

      【解决方案2】:

      您可以在第一次运行 redis 容器时设置一个空目录作为数据卷,然后使用 redis CLI 填充 redis 数据。 停止容器后,数据目录将包含一个工作的 redis 数据集。

      如果您运行另一个指定相同目录的容器实例,redis 将使用该数据。

      请注意,您需要配置 redis 以便将数据相应地持久保存到文件系统(请查看 https://redis.io/topics/persistence

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-08
        • 1970-01-01
        • 2017-02-15
        • 2017-02-17
        • 1970-01-01
        • 1970-01-01
        • 2019-03-17
        • 2021-07-19
        相关资源
        最近更新 更多