Chef infra 如何在厨师中加入docker食谱?

Chef infra 如何在厨师中加入docker食谱?,chef-infra,berkshelf,Chef Infra,Berkshelf,我正在尝试使用此链接提供的烹饪书定义一个厨师食谱来安装docker: 我用的是Berkshelf,所以我把这一行放在了Berkshelf文件中 cookbook 'docker', '~> 2.9.6' 这是在metadata.db上的 depends "docker" 我的食谱如下 include_recipe 'docker::docker_service' include_recipe 'docker::docker_image' include_recipe 'docker::

我正在尝试使用此链接提供的烹饪书定义一个厨师食谱来安装docker:

我用的是Berkshelf,所以我把这一行放在了Berkshelf文件中

cookbook 'docker', '~> 2.9.6'
这是在metadata.db上的

depends "docker"
我的食谱如下

include_recipe 'docker::docker_service'
include_recipe 'docker::docker_image'
include_recipe 'docker::docker_container'

docker_service 'default' do
        action [:create, :start]
end
但当我尝试运行厨房时,我得到以下错误:

ERROR: could not find recipe docker_service for cookbook docker
但是,如果我查看我的存储库,配方就在那里:

$ ls ~/.berkshelf/cookbooks/docker-2.9.6/libraries/ | grep docker_service.rb
docker_service.rb
我做错了什么

谢谢,
Michele.

docker cookbook没有提供任何食谱,这就是为什么您的
include\u recipe
调用失败的原因

相反,您只需使用这些资源,就像您已经使用的
docker\u服务
资源一样


删除三行
include\u recipe
时,配方应该运行。

docker cookbook没有提供任何配方,这就是为什么
include\u recipe
调用失败的原因

相反,您只需使用这些资源,就像您已经使用的
docker\u服务
资源一样


删除三行“包含”配方时,配方应运行。

docker\u服务是一种资源,而不是配方。请参阅自述,了解一些示例用法,但总体思路是,您需要编写自己的包装食谱,该手册使用提供的自定义资源。

docker\u service
是一种资源,而不是一个配方。参见自述文件了解一些示例用法,但总体思路是您需要编写自己的包装器cookbook,它使用提供的自定义资源。

正如@coderanger和@NilsLandt所述,您需要编写自己的cookbook来安装docker,只需调用cookbook提供的资源即可

例子 “chef generate cookbook”命令生成的示例cookbook

元数据.rb 添加“apt”和“docker”食谱作为依赖项

name 'docker_demo'
maintainer 'Mark O''Connor'
maintainer_email 'you@example.com'
license 'all_rights'
description 'Installs/Configures docker_demo'
long_description 'Installs/Configures docker_demo'
version '0.1.0'

depends 'apt'
depends 'docker'
recipes/default.rb 只需使用“docker_服务”资源创建docker服务。“创建”操作将安装Docker

#
# Cookbook Name:: docker_demo
# Recipe:: default
#
# Copyright (c) 2016 The Authors, All Rights Reserved.

include_recipe 'apt'

docker_service 'default' do
  action [:create, :start]
end
测试/集成/默认/服务器规范/默认\u规范.rb 验证docker安装的一组测试

require 'spec_helper'

describe file('/usr/bin/docker') do
  it { should be_file }
  it { should be_executable }
end

describe command('/usr/bin/docker version') do
  its(:stdout) { should match /Version:      1.12.1/ }
end

正如@coderanger和@NilsLandt所述,您需要编写自己的菜谱来安装docker,只需调用菜谱提供的资源即可

例子 “chef generate cookbook”命令生成的示例cookbook

元数据.rb 添加“apt”和“docker”食谱作为依赖项

name 'docker_demo'
maintainer 'Mark O''Connor'
maintainer_email 'you@example.com'
license 'all_rights'
description 'Installs/Configures docker_demo'
long_description 'Installs/Configures docker_demo'
version '0.1.0'

depends 'apt'
depends 'docker'
recipes/default.rb 只需使用“docker_服务”资源创建docker服务。“创建”操作将安装Docker

#
# Cookbook Name:: docker_demo
# Recipe:: default
#
# Copyright (c) 2016 The Authors, All Rights Reserved.

include_recipe 'apt'

docker_service 'default' do
  action [:create, :start]
end
测试/集成/默认/服务器规范/默认\u规范.rb 验证docker安装的一组测试

require 'spec_helper'

describe file('/usr/bin/docker') do
  it { should be_file }
  it { should be_executable }
end

describe command('/usr/bin/docker version') do
  its(:stdout) { should match /Version:      1.12.1/ }
end

谢谢我不明白。拆下电线后,它工作了。谢谢。我不明白。在删除行之后,它工作了。谢谢,这真的很有用,特别是测试部分。谢谢,这真的很有用,特别是测试部分。