docker-machineが再起動時にデータをクリアするのはなぜですか?


9

OSXでDocker Toolboxを使用しています。

永続データを保存するためのデータボリュームコンテナーを作成しました:https : //docs.docker.com/userguide/dockervolumes/#creating-and-mounting-a-data-volume-container

このデータが実際にはboot2docker VM(docker-machineによって作成された)に保存されており、コンテナーには保存されていないことを確認しました。ただし、「docker-machine restart」は、vm上のこのカスタムデータをクリアします。

何が起こっているかについてのドキュメントが見つかりません。/ var / lib / docker内のデータが保持されることを言及しているフォーラム投稿を1つ見つけましたが、それを述べている公式のドキュメントは見つかりませんでした。また、上記の永続ストレージガイドがこのパスを使用していないことや、データは削除されます。

これは予想されたものであり、永続的なデータを保存するための正しいパスに関する公式ドキュメントはありますか?


編集:失敗したシナリオの例を追加

$ docker-machine ssh alt
docker@alt:~$ docker run -v /data:/var/lib/mysql --name mydata busybox sh -c "echo 'hello' > /var/lib/mysql/hello"
docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello"
hello
docker@alt:~$ exit
$ docker-machine restart alt
Starting VM...
$ docker-machine ssh alt
docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello"
cat: can't open '/var/lib/mysql/hello': No such file or directory

回答:


8

これは間違いなくうまくいくはずです:

$ docker-machine ssh default
docker@default:~$ docker run -v /data --name mydata busybox true
docker@default:~$ docker run --volumes-from mydata busybox sh -c "echo hello >/data/hello"
docker@default:~$ docker run --volumes-from mydata busybox cat /data/hello
hello
docker@default:~$ exit
$ docker-machine restart default
Starting VM...
$ docker-machine ssh default
docker@default:~$ docker run --volumes-from mydata busybox cat /data/hello
hello

問題を再現する手順について詳しく説明できますか?

boot2dockerには読み取り専用のファイルシステムがあります(再起動時にワイプされます)。

  1. コンテナーとそのデータ(ボリューム)-これはあなたが読んだものです /var/lib/docker
  2. Dockerイメージ
  3. Dockerの構成(/var/lib/boot2docker/profileデーモンフラグを調整できる場所など)

こんにちは。返信の編集を提案しました。2番目、3番目、4番目の実行コマンドでbusyboxイメージを指定することを意味しましたか?そうしないと、dockerは「sh」および「cat」と呼ばれるイメージをダウンロードしようとしますが、これはあなたが意図したものではないと思われます。上記の失敗した例を追加します。
ジェリー

ご協力ありがとうございました。あなたと@ mc0eの両方がこれを手伝ったので、私はあなたにダニと彼に賞金(そして両方に+1)を与えました。このフェアをご検討いただきたいと思います。
ジェリー

1
ああそうです、タイプミス。タイプミスしてすみません。
nathanleclaire 2015

謝罪は必要ありません。私は誤解していないかどうかを確認するためだけにダブルチェックをしていました。これであなたのすべての助けを乾杯します。
ジェリー2015

6

私はboot2dockerを使用していませんが、再起動時に/ dataが消去されると、そこにボリュームが保存されるdocker run -v /data:/var/lib/mysqlため()、ボリュームは失われます。

また、ボリュームの永続性を処理するための2つの異なるパターンを組み合わせています。永続性を確保するために、コンテナーはホストシステムの指定された場所からボリュームをマウントできます(永続的であると推定されます)、またはデータコンテナーに関連付けてでマウントできます--volumes-from。ホストファイルシステムのアプローチはboot2dockerには適切ではないようです。データボリュームパターン(のみ)を使用する必要があります。

おそらくで-v /var/lib/mysqlはなく、でデータコンテナを作成する必要があります-v /data:/var/lib/mysql


-vフラグを使用してボリュームを作成し、その後--volumes-からのにまさにドキュメント番組で使用している他の容器にそのコンテナからボリュームを使用して:docs.docker.com/userguide/dockervolumes/... -v場合、私はそれを期待します/ locationは、それが/ var / lib / docker / volumesに対して相対的であることを知っているので、コロンを追加してもそれは変更されません。少なくともこれは直感的ではありません。-v / var / lib / mysql!= -v / var / lib / mysql:/ var / lib / mysqlまた、mysql- docker
ジェリー

ご協力ありがとうございました。あなたと@nathanleclaireの両方がこれを手伝ってくれたので、(もっと価値があるので)賞金を差し上げ、nathanleclaireにティックを与えました(両方に+1を付けました)。これは公平だと思いますか。
ジェリー

@Gerry確かにボリュームを作成し、それを--volumes-fromで使用することをお勧めします。ephemeral / dataをコンテナーにマウントすることはできません。
mc0e 2015

はい、問題は、再起動するまで/ dataが一時的であることを知りませんでした。
ジェリー

0

xhyve vmを使用しているMacベータ版のdockerを使用していることに注意してください。

/ var / lib / boot2dockerの内容は、マシンを再起動しても保持されます。したがって、特定のファイルをVMで使用できるようにする場合は、このディレクトリに配置します。

Dockerコンテナーを実行するために別の場所でアクセスできるようにしたい場合は、/ var / lib / boot2docker / profileに以下を追加できます。

mkdir -p /desired/path
ln -s /var/lib/boot2docker/your.file /desire/path/your.file

ホストファイルの追加の値など、VMの再起動間で持続する他の構成をシステムファイルに追加する場合は、次のようなコマンドを/ var / lib / boot2docker / profileに追加できます。

echo '127.0.0.1 your.domain.com' >> /etc/hosts

それが役に立てば幸い

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.