2015-08-19 7 views
6

Ho un contenitore redis. Vorrei eseguire il backup e reimportare il backup su un'altra macchina in un altro contenitore redis.Come ripristinare un backup redis in un contenitore redis?

ho seguito tesi passi:

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

Il backup non viene ripristinato correttamente. Che cosa sto facendo di sbagliato?

+0

affronta lo stesso problema. C'è qualche soluzione per questo ? Non vedo alcuna risposta accettata per questo problema. – Jugi

risposta

1

Ho trovato un modo per farlo.

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

Funziona ma sembra "sbagliato".

0

Mi sono imbattuto in una situazione simile. Quello che ho finito è stato creare un'altra immagine che non fa altro che eseguire i comandi per eseguire un inserimento di massa in un contenitore redis collegato. Anche questo funziona molto bene con il mio file di composizione docker.

così ho un'immagine di nome Redis e un altro di nome redis_data. L'immagine redis esegue il server Redis mentre redis_data invia i dati al server Redis collegato.

Dopo aver avviato un contenitore in base Redis (che ho chiamato redis_1), esegue un redis_data contenitore.

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

mio redis_data Dockerfile simile a questa (tagliati per brevità):

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 

L'host specificato con la chiamata redis-cli è l'alias abbiamo specificato al contenitore collegato.

Il file data.txt contiene i dati iniziali che desidero caricare nel formato del protocollo Redis appropriato (Redis Mass Insertion).