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

我正在尝试基于redis创build一个Redis Docker镜像:3。 但是,我需要将less量的testing数据加载到映像中(它用于在开发人员机器和CI服务器上进行testing)。

我最初的尝试看起来像:

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启动的服务器。 正如我现在猜测,运行发生在命令开始之前。

或者,是否有一个Redis命令或技巧,允许我将一些数据加载到其数据库中。

我怀疑一种方法是将Redis的数据目录安装到暴露给Docker主机的卷中; 这并不理想

  1. 我需要一个额外的非Dockerfile命令来加载数据
  2. 加载的数据将不会在图像中共享,供我的团队中的其他人使用
  3. 我在OS X上,并使用docker机,所以卷变得棘手

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

添加一个新行,首先启动它。 让我知道这是否可以解决您的问题。

 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映像 ,它给出了使用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"' 

所以我testing图像,并使其运行如下:

 # 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 $