事象
kubernetes環境でnode1(Minionサーバ)がハード障害により再起動。
node1復旧後にコンテナ自体は再作成されましたが、その中にデータを永続化していないコンテナがあったため、DBが空になってしまった
復旧に向けて
node1につなぎ以下を試みる。
コマンド | 結果 |
---|---|
docker start <コンテナ名> | 起動せず |
docker commit <コンテナ名> <イメージ名> | DBデータのないイメージが作成された |
docker inspect <コンテナID> | コンテナ詳細情報...の中にDBデータへのパスが! |
[root@hogehoge ~]# docker inspect 3f1ec342f66f
(省略)
"Mounts": [
{
"Name": "7e9049ff56d67dd8220977b683792969351a624c0df847af722b5e442aee6691",
"Source": "/var/lib/docker/volumes/7e9049ff56d67dd8220977b683792969351a624c0df847af722b5e442aee6691/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true
},
(省略)
この情報でホスト側からデータを取得することができ、データをロストせずに済みました
コンテナにもよると思いますが、マウント設定していなくともデフォルトでされているのですね・・・感謝。
逆にマウント設定されていないコンテナの場合はdocker commit
でデータもイメージに取り込まれるのかも知れません。
後で気づいた
テンパってて試さなかったけど、docker cp
でディレクトリごとコピーもできるみたい。