将初始数据加载到Redis Docker容器中

时间:2015-10-08 00:17:34

标签: redis docker

我尝试根据redis创建Redis Docker镜像:3。但是,我需要将少量测试数据加载到映像中(它用于在开发人员计算机和CI服务器上进行测试)。

我最初的尝试看起来像是:

FROM redis:3.0.3
MAINTAINER Howard M. Lewis Ship

RUN redis-cli sadd production-stores 5555

但这失败了,错误:

Step 2 : RUN redis-cli sadd production-stores 5555
 ---> Running in 60fb98c133c0
Could not connect to Redis at 127.0.0.1:6379: Connection refused
The command '/bin/sh -c redis-cli sadd production-stores 5555' returned a non-zero code: 1

我想知道是否有一个技巧允许我在Docker文件中连接到通过Dockerfile的CMD / ENTRYPOINT启动的服务器。正如我现在猜的那样,RUN发生在命令启动之前。

或者,是否有Redis命令或技巧可以将一些数据加载到其数据库中。

我怀疑一种方法是安装Redis'暴露给Docker主机的卷中的数据目录;

这并不理想
  1. 我需要一个额外的非Dockerfile命令来加载数据
  2. 图片中不会共享加载的数据,我的团队中的其他人将使用
  3. 我在OS X上使用的是docker-machine,因此卷变得更加棘手

1 个答案:

答案 0 :(得分:1)

错误告诉您在运行redis-cli之前未启动Redis服务。

添加新行以首先启动它。如果这可以解决您的问题,请告诉我。

FROM redis:3.0.3
MAINTAINER Howard M. Lewis Ship

RUN /usr/sbin/redis-server /etc/redis.conf

RUN redis-cli sadd production-stores 5555

更新

回顾官方redis image,它已经开始使用redis-cli

# via redis-cli
$ docker run -it --link some-redis:redis --rm redis sh -c 'exec redis-cli -h "$REDIS_PORT_6379_TCP_ADDR" -p "$REDIS_PORT_6379_TCP_PORT"'

所以我测试图像并使其运行如下:

# start redis container
$ docker run --name some-redis -d redis

# link redis container and run redis-cli command    
$ docker run -it --link some-redis:redis --rm redis redis-cli -h redis
redis:6379> PING
PONG
redis:6379> exit

# Add the specified members to the set stored at key    
$ docker run -it --link some-redis:redis --rm redis redis-cli -h redis sadd production-stores 5555
(integer) 1
$