Dockerコンテナー内で既存のクックブックを再利用しようとしていますが、ほとんどのレシピは、chefクライアントの実行中にサービスを開始します(Tomcat、Apache2など)。イメージの作成中にchef-soloが実行されると、chefの実行は単に失敗します。
クックブックがサービスを開始しないようにするにはどうすればよいですか?
私は次のDockerfileを使用しています
FROM jr42/chef-solo-centos
ADD chef /chef
RUN cd /chef && /opt/chef/embedded/bin/berks vendor /chef/cookbooks
RUN chef-solo -N mynode -c /chef/solo.rb -j /chef/solo.json
Runbook(solo.json)のTomcat:
{
"Tomcat": {
"base_version": ""
},
"run_list": [ "recipe[Tomcat]" ]
}
およびBerksfile:
source "https://supermarket.getchef.com"
metadata
cookbook 'Tomcat'
属性が変更されていないクックブックを使用しているようです。Tomcatクックブックのデフォルトの動作は、「デフォルト」のベースTomcatインスタンスを実行することです。
宣言されたリソース ここ および属性設定 ここ を参照してください。
solo.json
を更新して、この属性をオーバーライドできるはずです。
{
"Tomcat": {
"base_version": "",
"run_base_instance": false
},
"run_list": [ "recipe[Tomcat]" ]
}
また、サービスを自動的に開始するべきではありません。
または、 chef-container プロジェクトのドキュメントを見て、これがコンテナ化されたアプリケーションのより適切なビルド手順に対応しているかどうかを確認することもできます。