如何恢复redis容器中的redis备份?

我有一个redis容器。 我想备份它,并在另一个redis容器中的另一台机器上重新导入备份。

我遵循这些步骤:

# Create the original redis container docker run --name redis -d redis:3.0.3 redis-server --appendonly yes # add a key inside it for the tests docker run -it --link redis:redis --rm redis sh -c 'exec redis-cli -h "$REDIS_PORT_6379_TCP_ADDR" -p "$REDIS_PORT_6379_TCP_PORT"' > SET foo bar OK # backup this container docker run --volumes-from redis -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data # I now have a backup.tar file on my system and I transfer it on another machine # Recreate a redis container docker run --name redis2 -d redis:3.0.3 redis-server --appendonly yes # restore the backup docker run --volumes-from redis2 -v $(pwd):/backup ubuntu sh -c "cd / && tar xvf /backup/backup.tar" # check if the backup has been correctly restored docker run -it --link redis2:redis --rm redis sh -c 'exec redis-cli -h "$REDIS_PORT_6379_TCP_ADDR" -p "$REDIS_PORT_6379_TCP_PORT"' > GET foo (nil) 

备份未正确恢复。 我究竟做错了什么?

我find了一个方法来做到这一点。

 # untar the backup tar -xvf backup.tar # create a redis container an mounting the backup as the data folder docker run --name redis2 -v /home/docker/data:/data -d redis:3.0.3 redis-server --appendonly yes # test docker run -it --link redis2:redis --rm redis sh -c 'exec redis-cli -h "$REDIS_PORT_6379_TCP_ADDR" -p "$REDIS_PORT_6379_TCP_PORT"' > get foo "bar" 

它有效,但感觉“错误”。

我遇到了类似的情况。 我最终做的是创build另一个图像,除了运行命令来执行批量插入链接的redis容器。 这也和我的docker-compose文件起到了很好的作用。

所以我有一个名为redis的图像,另一个名为redis_dataredis映像运行Redis服务器,而redis_data将数据传输到链接的Redis服务器。

在基于redis的容器启动后(我命名为redis_1 ),我运行redis_data容器。

 docker run -d --name redis_data_1 --link redis_1:redis redis_data 

我的redis_data Dockerfile看起来像这样(为简洁起见):

 RUN apt-get update RUN apt-get install -y redis-server ADD data.txt /usr/bin/data.txt CMD cat /usr/bin/data.txt | redis-cli -h redis --pipe 

使用redis-cli调用指定的主机是我们为链接容器指定的别名。

data.txt文件具有我想要以适当的Redis协议格式( Redis Mass Insertion )加载的初始数据。