web-dev-qa-db-ja.com

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

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

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

このデータが実際にはboot2docker VM(docker-machineによって作成された)に保存されており、コンテナーに保存されていないことを確認しました。 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
9
Gerry

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

$ 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デーモンフラグを微調整できる場所)
8
nathanleclaire

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

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

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

6
mc0e

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

それが役に立てば幸い

0
baoluofu