chef-solo 与 docker:防止服务在构建期间启动

chef-solo 与 docker:防止服务在构建期间启动

我正在尝试在 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

我的运行手册中的 tomcat(solo.json):

{
  "tomcat": {
    "base_version": ""
  },
  "run_list": [ "recipe[tomcat]" ]
}

和 Berksfile:

source "https://supermarket.getchef.com"
metadata
cookbook 'tomcat'

答案1

看起来您正在使用未修改属性的食谱,而 tomcat 食谱的默认行为是运行“默认”基本 tomcat 实例。

引用声明的资源这里和属性设置这里

您应该能够更新您的solo.json以覆盖此属性:

{
  "tomcat": {
    "base_version": "",
    "run_base_instance": false
  },
  "run_list": [ "recipe[tomcat]" ]
}

并且您不应该让该服务自动启动。

或者,你可以看看厨师容器项目文档,看看这是否映射到您的容器化应用程序的更好的构建过程。

相关内容