Docker-compose redis:从fixture开始?

时间:2019-07-07 23:43:36

标签: docker redis docker-compose

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

2 个答案:

答案 0 :(得分: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服务的名称。您可能需要确保可以从主机redis访问--ports: 6379:6379服务,以便外部redis-cli可以访问它。

此方法仅在本地使用时效果很好,但不利于将解决方案部署到其他地方。

2。弹性:测试按键

据我所知,Docker Compose不能很好地等同于Kubernetes的init容器,该容器在 依赖容器之前运行。

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

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

更高级的解决方案是为redis密钥的存在定义一个运行状况检查,然后depends_upon: ... condition: service_healthy(请参阅link

另请参见here

中所述的Docker Compose中的启动顺序

答案 1 :(得分:0)

您需要修改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