2016-03-12 2 views
6

私はDockerfile順序でこれらの2つのコマンドを持っている(https://gist.github.com/hasMobi/e198555704ee57e84399)を持っている:Dockerfileは - 1つのRUNコマンドでファイルを削除し、それはまだ、次のRUNコマンドに存在している

RUN rm -frv /usr/share/nginx/html/* 
RUN ls /usr/share/nginx/html/ 

私はコンソールを見て敬遠しがちのイメージを構築しながら、私はそのフォルダから削除されている2つのファイルをはっきりと見ることができますが、次のRUNコマンドが来るとき、それはディレクトリの内容を一覧表示し、ファイルが起こっている?:まだそこ

enter image description here

ですここに?私は、各RUNコマンドが別のレイヤーを作成し、もう1つはレイヤーから分離されていることを理解していますが、2つ目のRUNコマンドは、前回のRUNコマンドと同じ状態でファイルシステムを継承するはずです)?

+0

ドッカーファイルの12行目を 'RUN rm -frv/usr/share/nginx/html/* && ls/usr/share/nginx/html /'に変更した場合、どの出力を得ますか?問題があなたのコマンドであるかどうかを特定しようとしているか、イメージ内のレイヤーが正しく重ね合わされていない場合は、 – CtheGood

+1

同じ問題が発生し、削除しようとしていたファイルが定義されているそのため、ボリュームはすべてのレイヤーで再作成されるように、基本イメージDockerfileによってボリューム内にあるものとして扱われます。 [Docker documentation](https://docs.docker.com/engine/reference/builder/#volume)から: '宣言されたボリューム内のデータを変更するビルドステップがあれば、それらの変更は –

答えて

1

基本的に、基本イメージのADDコマンドは、DockerファイルのRUNコマンドを上書きしています。詳細については、thisを参照してください。

注:変更された内容が変更された場合、最初に検出されたADD命令はDockerファイルからの以降のすべての命令のキャッシュを無効にします。これには、RUN命令のキャッシュを無効にすることが含まれます。詳細については、Dockerfileベストプラクティスガイドを参照してください。

ソースベースイメージをフォークし、カスタマイズしたバージョンを使用することを検討してください。

+0

Dockerfile:https://gist.github.com/hasMobi/e198555704ee57e84399 結果:http://prntscr.com/aeng43 「Dockerfile」と同じフォルダ内には、他の唯一のファイルは/ code/index.html、 "Hello world"というテキストが内部にあります。私の最終目標は '/ usr/share/nginx/html /'にこのファイルだけを置くことです。しかし、index.phpはRUNコマンドごとに 'html'フォルダの中に復元されているようです。 –

+0

ところで、私はWindows上でDocker v1.10.3を使用しています。 –

+0

行12を 'RUN rm -frv/usr/share/nginx/html/* && ls/usr/share/nginx/html /'にしようとすると、どのような出力が得られますか?あなたのコマンドに問題があるかどうかを特定するか、イメージのレイヤーが正しく重ね合わされていないかどうかを調べるだけです。 – CtheGood

1

私は同様の問題があった:

RUN rm -rf /full/path 
    RUN ln -s /other /full/path 

"/フル/パスは" まだ二RUNに存在するため、これが失敗しました。この回避策の動作は次のとおりです。

RUN rm -rf /full/path; ln -s /other /full/path 

私はこの動作を理解できませんが、私の場合は回避できました。

関連する問題