2017-10-05 17 views
0

私は、関連するボリュームなしで、ドッカー作成環境で使用される公式のsolr 6.6コンテナを実行しています。 実行中のsolrコンテナを変更すると、データは再起動後も有効です。例えば、プリント「woot」は前記Docker:コンテナ内のボリュームを持たないコンテナはどのようにデータを保持しますか?

docker run --name solr_test -d -p 8983:8983 -t library/solr:6.6 
docker exec -it solr_test /bin/bash -c 'echo woot > /opt/solr/server/solr/testfile' 
docker stop solr_test 
docker start solr_test 
docker exec -it solr_test cat /opt/solr/server/solr/testfile 

: 私は、任意のボリュームがマウントされ、それが平野Solrのコンテナのために働くご覧くださいいけません。私はコンテナがデータを永続化しないと思った? documentationには、solrコアがコンテナ内に保持されていることが記載されています。 私が見つけたのは、コンテナ永続性に関して、私は自分自身でボリュームを追加する必要があるということです。hereです。 私は混乱しています:コンテナはコンテナ内のデータを変更したかどうかを保存しますか?そして、solrコンテナはこの動作をどのようにして実現しますか?私が見る唯一の選択肢は、ドッカーの場合の矛盾を誤解しているか、コンテナのビルドがこれを達成するための何らかのオプションを設定できるということです。

+0

答えを教えてください。 –

+0

yep - 多くのthx、私はドッカーのコミットを使用したことはありませんが、それが存在し、主にアプリケーションのスローアウェイ環境としてコンテナを考えていた –

答えて

2

これは予想される動作です。 コンテナ内に作成したデータは、コンテナを削除しない限り保持されます。

しかし、何らかの方法でコンテナを考え直すことを考えてください。通常は、docker rmでコンテナを削除し、変更した設定ファイルを含む新しいインスタンスを生成することができます。そのため、たとえばここで指定したvolumeという名前は、ホスト上のコンテナのライフサイクルで存続します。

Dockerfileあなたの質問に言及しているので、実際にはイメージのみを定義しています。 docker runに電話すると、コンテナが作成されます。正確に画像で定義されている通り。変更のない新鮮なインスタンス。

docker commitをコンテナに呼び出すと、スナップショット(ファイルの変更を含む)がスナップショットとして保存され、新しいイメージが作成されます。この方法でデータの永続性を実現します。 あなたが参照しているドキュメントでこれについて詳しく説明しています。

+1

良い答え。 execが_running_ conatainerでのみコマンドを実行することを追加することがあります。開始は削除ではなく、その場合は「一時停止」となります。したがって、データはまだ有効であり、コンテナは削除されません。 startを呼び出すと、非常に同じコンテナが再開されます。新しいコンテナは作成されません。 Startは、既に作成されたコンテナでのみ呼び出すことができます。イメージは作成されないため、イメージでは実行されません。イメージから新しいコンテナが作成されます。 start/stop/execは既存の(作成された)コンテナに対するもので、runは新しいものを作成します。 –

+0

もう少し質問がありましたら、私は短い検索で回答を見つけられませんでした。ドッカーの作成やドッキングを開始するためのオプションがいくつかありますが、最初からコンテナをイメージから開始するように強制します。作成ファイルの処理に関する特別な知識が必要です。私はいくつかのapache/phpアプリケーションについて考えていますが、これはファイルキャッシュを使用するかもしれませんが、これは例として空になることが予想されます。 –

+0

ネットワーク、ボリューム、イメージの削除のためにdockerシステムプルーニングを調べ、ドッキングアップ - Dockerfileから再構築するビルド –

関連する問題