2017-03-09 14 views
-1

にコピーされたときにコピーされていないディレクトリのパーミッション私Dockerfileの関連する部分である:私のドッキングウィンドウ-コンでドッカー:ファイルはここにボリューム

RUN cd /path/to/future/volume \ 
&& if [ ! -d "init_data" ]; then tar xvzf init_data.tar.gz; fi \ 
&& chmod 775 init_data 

、私は上/パスマッピングされた名前のボリュームを使用しています/ to/future/volume(my-volume:/ path/to/future/volume)ので、Dockerは/ path/to/future/volumeからホストディレクトリにすべてのファイルをコピーすることになっています。

コピー自体は機能します(そして、すべてのユーザーとグループの所有権は良好です)。chmodを除く775 init_dataは適用されません。

ボリュームを作成した後、コンテナとボリューム内で動作する "chmod 775 init_data"がコンテナに入っていますが、ビルド時にこの書き込みパーミッションをグループに設定する必要があります。

なぜこのようなことが起こり、回避策として何ができますか?

+0

ボリュームを最初に作成した後でDockerfileにchmodを追加しましたか? – BMitch

+0

さて、 "docker-up up -d"の前にボリュームを削除しようとしましたが、正しい権限がボリューム内のinit_dataに適用されています。私は正確なコピー/上書き/マージのルールについては、既存の名前付きボリュームを使用してコンテナを実行するとき(おそらく、ボリュームが既に存在するときにすべてのコピーがありますか? – Tristan

+0

これはちょうど正しいもので、内部にデータがあるボリュームが存在した後はボリュームがありません。ボリュームが完全に空の場合、私はそれも初期化すると信じていますが、ボリュームが存在しない場合は確かです。 – BMitch

答えて

1

Dockerは名前付きボリュームが空の場合にのみ初期化します。データが内部に格納されると、初期化ステップはスキップされます(そうしないと、データの上書きや削除が発生する可能性があります)。

新しい画像からの変更を確認するには、古いコンテナだけでなく古いボリュームも削除する必要があります。

これは、ホストボリューム(ドッキングホストからコンテナに直接パスをバインドする)には適用されないことに注意してください。空の場合でも、ホストボリュームは決して初期化されません。

関連する問題