2015-08-19 17 views
6

Tôi có một thùng chứa redis. Tôi muốn sao lưu nó và nhập lại bản sao lưu trên máy khác trong một container redis khác.Làm thế nào để khôi phục lại một bản sao lưu redis trong một redis container?

Tôi đi theo đề tài bước sau:

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

Sao lưu không được phục hồi đúng cách. Tôi đang làm gì sai?

+0

tôi phải đối mặt với cùng một vấn đề. Có giải pháp nào cho điều này ? tôi không thấy bất kỳ câu trả lời được chấp nhận cho vấn đề này. – Jugi

Trả lời

1

Tôi đã tìm được cách để thực hiện.

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

Nó hoạt động nhưng cảm thấy "sai".

0

Tôi gặp phải tình huống tương tự. Những gì tôi đã kết thúc làm là tạo ra một hình ảnh mà không có gì, nhưng chạy các lệnh để thực hiện một khối lượng chèn vào một container redis liên kết. Điều này cũng chơi rất độc đáo với tập tin docker-compose của tôi.

Vì vậy, tôi đã là một hình ảnh mang tên redis và một tên redis_data. Hình ảnh redis chạy máy chủ Redis trong khi redis_data chuyển dữ liệu đến máy chủ Redis được liên kết.

Sau một redis dựa container được bắt đầu (mà tôi đặt tên redis_1), tôi chạy một redis_data container.

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

My redis_data Dockerfile trông giống như thế này (tỉa cho ngắn gọn):

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 

Người dẫn chương trình chỉ định với redis-cli gọi là bí danh, chúng tôi quy định để các thùng chứa liên kết.

Tệp data.txt có dữ liệu ban đầu của tôi mà tôi muốn được tải theo định dạng giao thức Redis thích hợp (Redis Mass Insertion).

Các vấn đề liên quan