2017-02-07 7 views
0

私は公式のWordPressイメージに基づいて新しいDockerfileを作成しました。なぜ私がデフォルトのテーマを削除できないのかをトラブルシューティングしようとしています。理由は、コマンドが実行された時点でファイルが実際には存在しないためであることがわかりました。コンテナが実行されて後、私はそれを手動で実行した場合、予想通りDocker WordPressイメージでは、アプリケーションファイルのコピーに何が遅れますか?

FROM wordpress 
RUN rm -rf /var/www/html/wp-content/themes/twenty* 

削除コマンドの作品:ここ

は私のDockerfileから関連する行があります。

追加のカスタムテーマを/var/www/html/wp-content/themesディレクトリにコピーすると、Dockerfileからは動作しますが、期待通りのものではないことも発見しました。公式のドッカーイメージのファイルはすべて、同じファイルのカスタムバージョンを上書きするためです。私は自分の設定ファイルを提供したい場合に備えて、これを逆の方法で動作させることを想像していたでしょう。

だから私は、実際には2つの質問がある:

  1. はドッカー関連のこの振る舞いですか?それともワードプレス特有のイメージですか?
  2. どうすれば解決できますか?それはハックのように感じますが、Dockerfileからの遅延コマンドを非同期に実行する方法がありますか?
+0

Dockerfileとコンテナの実行に使用するコマンドを含め、問題の[最小限の完全な例](http://stackoverflow.com/help/mcve)を含めてください。作成を使用している場合は、ymlファイルをインクルードします。最も重要なのは、イメージ内またはコンテナの実行中に定義したボリュームを含めることです。 – BMitch

答えて

1

何が起きているのですか、ベン!

あなたの問題は、Dockerによって導入されたコンセプト(entrypoint)に関連しています。通常、コンテナの実行時に実行されるスクリプトで、実行時に実行する必要のあるアクションが含まれています(ビルド時ではありません)。このスクリプトは、イメージを実行した直後に実行されます。それらは、コンテナをサービスのように動作させるために使用されます。 CMDディレクティブで設定されたパラメータは、デフォルトではエントリポイントに直接渡され、上書きすることができます。

引っ張っているイメージのDockerfileのdebianテンプレートはhereです。ご覧のとおり、docker-entrypoint.shというエントリポイントが呼び出されます。私はあまりにも多くのことをしたくないので、基本的に、あなたのアプリケーションのインストールを実行しています。

Wordpressイメージを継承しているため、Wordpressイメージのエントリポイントが実行されています。もはや実行されないように上書きすることは、あなたのイメージを役に立たなくするので、良いアイデアでもありません。この場合には働くだろう

簡単なハックは以下のようになります。

それは一般的に(実行することを決定したものは何でもサービス、それらのファイルや実行を削除するには、最後のexec句を作り、エントリポイントを書き換えるでしょう
FROM wordpress 
RUN sed -i 's/exec \"\$\@\"/exec \"rm -rf \/var\/www\/html\/wp-content\/themes\/twenty\* \&\& \$\@\"/g' 

apache、しかし、私はこのコンテナのどのケースに該当するのかわかりません)。

私はそれが助けてくれることを願っています! :)

関連する問題