質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

6535閲覧

dockerコンテナ内で動作中のredisのdumpをリストアしたい

bleurouge

総合スコア161

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2015/10/27 12:00

docker コンテナ内で動作しているredis(docker hubオフィシャルのredisコンテナ)のdumpをリストアしたいのですが、コンテナが動作している状態でredisのみ再起動は可能でしょうか?

そもそもdockerへの理解が不足している可能性があるかもしれません。
コンテナ内でserviceコマンドを使い、redisの再起動を試みましたが、service --status-allを見る限り
そもそもredisのサービス自体が存在しませんでした。

$ sudo docker exec -it redis-server /bin/bash root@redis-server:/# service --status-all [ - ] bootlogs [ ? ] bootmisc.sh [ ? ] checkfs.sh [ ? ] checkroot-bootclean.sh [ - ] checkroot.sh [ - ] hostname.sh [ ? ] hwclock.sh [ ? ] killprocs [ - ] motd [ ? ] mountall-bootclean.sh [ ? ] mountall.sh [ ? ] mountdevsubfs.sh [ ? ] mountkernfs.sh [ ? ] mountnfs-bootclean.sh [ ? ] mountnfs.sh [ ? ] mtab.sh [ ? ] rc.local [ - ] rmnologin [ ? ] sendsigs [ ? ] umountfs [ ? ] umountnfs.sh [ ? ] umountroot [ - ] urandom

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

コンテナのデータボリュームを直接参照することで解決しました。
redisコンテナを停止し、ホスト側からデータボリューム内のdump.rdbを
直接更新することで、redisコンテナ内のデータのリストアが可能です。
cpでバックアップデータを上書き後、再度コンテナを start すればデータは更新されます。

$ sudo docker inspect --format='{{range $vol, $path := .Volumes}}{{$vol}}:{{$path}}{{"\n"}}{{end}}' redis /data:/var/lib/docker/vfs/dir/8aae5f5fd01f9e6f9604c66f26a025e4e2e473ab83fcd62b34bcef931cb5b098 $ sudo cp ./buckup_dump.rdb /var/lib/docker/vfs/dir/8aae5f5fd01f9e6f9604c66f26a025e4e2e473ab83fcd62b34bcef931cb5b098/dump.rdb

余談ですが、redisコンテナの/dataを データボリュームコンテナで共有しようとする場合コンテナの起動
ができませんでした。

投稿2015/11/19 16:22

編集2015/11/19 16:25
bleurouge

総合スコア161

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

dockerのredisはサービスではなく直接実行しているのでredisを再起動(停止)するとコンテナも終了します。
コンテナを止める前提ですが、以下の手順でリストアできます。

  1. docker stop redisで停止
  2. docker run -it -v dump.rdb:/tmp/dump.rdb redis /bin/bash でコンテナ内にバックアップファイルを持ち込みシェルを実行
  3. cp /tmp/dump.rdb /data/dump.rdbでコピー後、exitで一旦コンテナを終了。/dataはボリュームなので永続化されています。
  4. docker run -d redisでコンテナを実行

コピー先やボリュームの設定はDockerfileをご確認下さい。

余談ですが、redisプロセスの確認はdocker exec -it コンテナID /bin/bashで実行中のコンテナに入りps -ef | grep redisで確認できます。

投稿2015/10/27 17:05

shiena

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bleurouge

2015/10/28 14:56

ありがとうございます。リストア用のdumpを持ち込み新たにコンテナを起動する必要があると理解しました。 redisのコンテナは他のコンテナからリンクしていることが多いかと思います。芋づる式に他も作り直す必要がでてきてしまいそうです。 わたしのケースでは/dataに対して共有用のディレクトリをあらかじめ用意しておいた方が良さそうですね。確認していませんが docker stop redis で停止した状態でホスト側の共有ディレクトリでdumpを上書きして docker start redis で再度起動すれば、目的の操作ができそうな気がしました。
shiena

2015/10/28 15:53

そうですね。/dataをボリュームで共有しておけばコンテナ内部に持ち込む手間を省けるので楽です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問