我正在尝试基于 redis:3 创建一个 Redis Docker 映像。但是,我需要将少量测试数据加载到图像中(它用于测试,无论是在开发者机器上还是在 CI 服务器上)。
我最初的尝试看起来像:
FROM redis:3.0.3
MAINTAINER Howard M. Lewis Ship
RUN redis-cli sadd production-stores 5555
Run Code Online (Sandbox Code Playgroud)
但这失败并出现错误:
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
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一个技巧可以让我在 Docker 文件中连接到通过 Dockerfile 的 CMD/ENTRYPOINT 启动的服务器。正如我现在猜测的那样,RUN 发生在命令启动之前。
或者,是否有 Redis 命令或技巧可以让我将一些数据加载到其数据库中。
我怀疑一种方法是将 Redis 的数据目录挂载到暴露给 Docker 主机的卷中;这并不理想,因为
该错误表明在运行 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
Run Code Online (Sandbox Code Playgroud)
查看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"'
Run Code Online (Sandbox Code Playgroud)
所以我测试了图像并使其运行如下:
# 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
$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5568 次 |
| 最近记录: |