【问题标题】:Docker-compose redis: start with fixture?Docker-compose redis:从夹具开始?
【发布时间】:2019-07-07 23:43:36
【问题描述】:

我正在使用 docker-compose 创建一个 redis 容器。但是,我需要它从一些默认键值开始。这可能吗?

【问题讨论】:

    标签: docker redis docker-compose


    【解决方案1】:

    你需要修改你的 DockerCompose 文件,你也可以从一些包含键值的文件中添加,但这里是在 DockerCompose 文件中添加和获取键的最简单的例子。

    version: '2'
    
    services:
      redis:
        image: 'bitnami/redis:latest'
        environment:
          - ALLOW_EMPTY_PASSWORD=yes
        ports:
          - '6379:6379'
        command:
          - /bin/sh
          - -c
          - |
              nohup redis-server &
              sleep 5
              echo "adding some default key value"
              redis-cli SET docker awesome
              echo "Get docker key value"
              redis-cli GET docker
              # this will keep container running
              tail -f /dev/null
    

    【讨论】:

    • 请注意,如果 Redis 服务器崩溃,由于它不是主容器进程,Docker 不会注意到这一点。你有“一个什么都不做的容器,它恰好也在运行 Redis”,而不是“一个运行 Redis 的容器”。例如,PostgreSQL entrypoint script 会竭尽全力正确执行此操作。
    • 是的,这不是主要的过程,而是一种添加键值的方法。
    • 辛苦了!谢谢
    • 但是它以保护模式启动redis容器。如何在此 yaml 文件本身中禁用保护模式?
    【解决方案2】:

    有几种方法,但请注意,默认情况下,服务使用 Docker Compose 以任意顺序启动,即使您使用 depends_on,这也只会检查容器是否正在运行(例如 redis),而不是它们'已经完成了一些初始化过程。

    1。最简单:预创建

    查看使用持久存储运行redis 映像的选项:

    https://hub.docker.com/_/redis/

    使用这种方法,您可以将本地目录挂载到容器的/data 目录中创建一个(数据)卷并使用它。然后,您可以通过对它运行 redis-cli 来预填充 redis 服务器。

    这样做的一个技巧是对您计划的docker-compose.yml 文件,但docker-compose --file=/path/to/docker-compost.yaml up redis 其中redis 也是redis 服务的名称。您需要确保可以从主机 --ports: 6379:6379 访问 redis 服务,以便外部 redis-cli 可以访问它。

    这种方法非常适合仅在本地使用,但不利于在其他地方部署解决方案。

    2。弹性:测试键

    Docker Compose - 据我所知 - 没有提供与 Kubernetes 的 init 容器等效的优雅,后者在依赖容器之前运行

    使用 Docker Compose,您可以包含一个初始化(运行一次)redis-cli 以填充服务器,但您必须在启动(成功)之前增加任何客户端以检查这是否已完成或是否存在此数据。

    最简单的解决方案是让 redis 客户端失败,如果 redis 密钥不存在,则restart: always

    更高级的解决方案是为 redis 键的存在定义健康检查,然后定义 depends_upon: ... condition: service_healthy(参见 link

    另见 Docker Compose 中描述的启动顺序here

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 2021-07-09
      • 2019-02-05
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 2021-12-01
      • 2015-04-30
      相关资源
      最近更新 更多