LoginSignup
18
17

More than 5 years have passed since last update.

【解決報告】dockerのエラーとimageバックアップ、データ永続化設定

Last updated at Posted at 2014-07-08

docker&boot2docker 1.1で以下のような現象が起きてます。
もしどなたか判れば教えて欲しいです。

docker imageのバックアップ法

boot2docker_vmが、異常ステータスになってしまっています。
起動するとdockerコマンドは通り、dockerコンテナ/イメージには正常にアクセスできるのですが、boot2docker_vmのIP取得に失敗し、sshも取得できないので、dockerコンテナにはアクセスできるのに、その中間のboot2docker_vmに全くアクセスできない状況になってしまっています。

起動時の例:

$ boot2docker up
2014/07/08 08:48:10 Waiting for VM to be started...
2014/07/08 08:48:10 exit status 255

2014/07/08 08:48:10 Started.
2014/07/08 08:48:11   Trying to get IP one more time
2014/07/08 08:48:11 exit status 255
2014/07/08 08:48:11 Auto detection of the VM's IP address failed.
2014/07/08 08:48:11 Please run `boot2docker -v up` to diagnose.

ssh接続:

$ boot2docker ssh
2014/07/08 08:53:07 exit status 255

ネットを調べると、原因は判りませんでしたがここまで行くと boot2docker delete &&boot2docker initするしか解決法がないようです。
それで解決するならばやるしかないのですが、今まで作ったdocker imageが全部消えてしまいます。

docker imageをバックアップする方法ってないんでしょうか。
今作ってるイメージも可能ならばバックアップしたいので、可能ならばdockerコマンドでバックアップしたいのですが、もし無理なら今のイメージはギリギリDockerfileで時間かければ再現可能なので、boot2docker ssh経由でもよいので今後の為にバックアップする方法を知りたいです。

docker hubを使えばもちろんバックアップできるのですが、privateは1つしか作れないので、できれば他の方法がいいかなと思ってます。
というか、バックアップ以前に、手元のPCで作ったイメージ、本番サーバへの転送とかどうやってやるんでしょうか。
それができれば、同じ要領でバックアップできると思うのですが…。

MacOSXローカルディスクとdockerコンテナ間のストレージ共有によるデータ永続化

boot2docker_vm内ストレージとdockerコンテナ間の共有は、docker up の-v指定でできるわけですが、boot2docker_vmとMacOSX間のストレージ共有方法がよく判らないので、MacOSXローカルディスクとdockerコンテナ間のストレージ共有方法が判りません。

調べた限りは、boot2docker_vmの標準isoだとMacOSXとの共有ストレージの設定ができないので、
http://qiita.com/udzura/items/b637adefe360dc784972
にあるような、vboxfsが有効になったisoを取ってきて使うということでした。
なのでそれを試していてしばらくうまくいっていたのですが、結果的に前項のようにvmアクセス不能と言う事態が起きてしまって、その原因が標準じゃないisoを使ってるせいかもしれないので、もう止めようと思っています。

boot2docker標準のisoを使って、dockerコンテナとMacOSXでストレージ共有して、データ永続化&管理簡単化する方法はないでしょうか。

どなたか詳しい方、情報共有いただければ幸いです。

(7/9 追記)

解決しました。
原因と解決法、以下に記します。

boot2docker_vmで、IP取得に失敗し、sshも繋げられなくなる問題の原因

20回以上テストして100%の再現率なので間違いないと思いますが、この現象になる原因は、vboxfsが有効になったisoを使ったせいではありませんでした。
以前の記事で書いたような、VirtualBox上での、MacOSX<=>boot2docker_vm間のポートフォワーディングを、boot2dockerが最初から用意している127.0.0.1:2022<=>boot2docker_vm:22、127.0.0.1:2375<=>boot2docker_vm:2375の2つ以外に設定した状態でboot2docker upすると、100%発生します。
そして一旦発生しだしたvmでも、独自ポートフォワーディング設定を削除して起動すると、正常動作に戻ります。

正常起動した後に、ポートフォワーディングを追加しても、問題なく動きます。
面倒ですが、boot2docker_vmのポートフォワーディング情報は落ちている時は削除しておき、起動させてから都度必要なものを追加した方がよさそうです。
dockerコンテナそのものと違って頻繁に落とすものでもないので、我慢しましょう。

boot2docker_vmからの、イメージのレスキュー&復帰

docker save / loadというそのものずばりのコマンドがありました。

$ docker save イメージのタグ又はID > ファイル名.tar

としてやれば、結構時間かかりますが、イメージがMacOSX上にファイル出力されます。

復帰する際は、

$ docker load < ファイル名.tar

で、IDやタグ名もちゃんと保持された形で、新しいboot2docker_vm上にイメージが再構築できます。

boot2docker_vmとMacOSX間のストレージ共有

vboxfsが有効になったisoを使ったせいで不具合になったわけではないようなので、最初の記事で書いた

boot2docker + vboxfs な環境を用意したい(Macで)

のやり方で問題ないようです。
なんで標準で用意してくれないのかと思いますが、本家IssueTrackerでも長らく議論されてるようですがなかなか取り込まれないようです。
しばらくはvboxfs対応させた野良isoを使いましょう。

ただ、できる限りboot2dockerそのもののバージョンとあったisoを使った方がいいと思いますが、最新の野良isoも、上記IssueTrackerを見てれば随時出てきそうです。
例えば、docker 1.1.0に対応したisoは、こちらのコメントで紹介されています。

18
17
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17