Packer docker build在运行runit cookbook

时间:2016-01-29 07:05:43

标签: docker chef packer

我正在尝试使用Packer来构建我正在处理的webapp的docker镜像。每当我运行packer build时,当它到达运行runit食谱的步骤时,我会得到Build 'docker' errored: Error executing Chef: Non-zero exit status: 137

我查看了137,发现这是与kill -9通常相关的退出代码。在大多数情况下,这意味着系统的内存运行严重不足,系统正在尝试进行补偿。

我试图找到最小的再现,我想出了这个打包器配置:

{
    "builders":[{
        "type": "docker",
        "pull": false,
        "image": "silkstart/basic_server",
        "export_path": "image.tar",
        "run_command":[
            "-d",
            "-i",
            "-t",
            "--memory-reservation",
            "1G",
            "{{.Image}}",
            "/bin/bash"
        ]
    }],
    "provisioners":[
        {
            "type": "chef-solo",
            "cookbook_paths": ["cookbooks", "vendor/cookbooks"],
            "data_bags_path": "data_bags",
            "roles_path": "roles",
            "environments_path": "environments",
            "run_list": [
                "recipe[runit]"
            ]
        }
    ],
    "post-processors": [
        {
            "type": "docker-import",
            "repository": "silkstart/docker_test",
            "tag": "0.1"
        }
    ]
}

当我在此配置上运行packer build时,这是我的输出:

TMPDIR=/opt/shared packer build packer_files/docker_test.json
docker output will be in this color.

==> docker: Creating a temporary directory for sharing data...
==> docker: Starting docker container...
    docker: Run command: docker run -v /opt/shared/packer-docker484290992:/packer-files -d -i -t --memory-reservation 1G silkstart/basic_server /bin/bash
    docker: Container ID: 1f87b0cf1fe71f07b580ae6b18415a79c23a1a32a40f5f0366be90f160977a50
==> docker: Provisioning with chef-solo
    docker: Installing Chef...
    docker: % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
    docker: Dload  Upload   Total   Spent    Left  Speed
    docker: 100 20022  100 20022    0     0  45092      0 --:--:-- --:--:-- --:--:-- 45196
    docker: Getting information for chef stable  for ubuntu...
    docker: downloading https://omnitruck-direct.chef.io/stable/chef/metadata?v=&p=ubuntu&pv=14.04&m=x86_64
    docker: to file /tmp/install.sh.23/metadata.txt
    docker: trying curl...
    docker: url https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/14.04/x86_64/chef_12.6.0-1_amd64.deb
    docker: md5 5cfc19d5a036b3f7860716bc9795a85e
    docker: sha256  e0b42748daf55b5dab815a8ace1de06385db98e29a27ca916cb44f375ef65453
    docker: version 12.6.0downloaded metadata file looks valid...
    docker: downloading https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/14.04/x86_64/chef_12.6.0-1_amd64.deb
    docker: to file /tmp/install.sh.23/chef_12.6.0-1_amd64.deb
    docker: trying curl...
    docker: Comparing checksum with sha256sum...
    docker:
    docker: WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
    docker:
    docker: You are installing an omnibus package without a version pin.  If you are installing
    docker: on production servers via an automated process this is DANGEROUS and you will
    docker: be upgraded without warning on new releases, even to new major releases.
    docker: Letting the version float is only appropriate in desktop, test, development or
    docker: CI/CD environments.
    docker:
    docker: WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
    docker:
    docker: Installing chef
    docker: installing with dpkg...
    docker: Selecting previously unselected package chef.
    docker: (Reading database ... 17195 files and directories currently installed.)
    docker: Preparing to unpack .../chef_12.6.0-1_amd64.deb ...
    docker: Unpacking chef (12.6.0-1) ...
    docker: Setting up chef (12.6.0-1) ...
    docker: Thank you for installing Chef!
    docker: Creating directory: /tmp/packer-chef-solo
    docker: Creating directory: /tmp/packer-chef-solo/cookbooks-0
    docker: Creating directory: /tmp/packer-chef-solo/cookbooks-1
    docker: Creating directory: /tmp/packer-chef-solo/roles
    docker: Creating directory: /tmp/packer-chef-solo/data_bags
    docker: Creating directory: /tmp/packer-chef-solo/environments
    docker: Creating configuration file 'solo.rb'
    docker: Creating JSON attribute file
    docker: Executing Chef: sudo chef-solo --no-color -c /tmp/packer-chef-solo/solo.rb -j /tmp/packer-chef-solo/node.json
    docker: [2016-01-29T06:42:48+00:00] INFO: Forking chef instance to converge...
    docker: [2016-01-29T06:42:48+00:00] INFO: *** Chef 12.6.0 ***
    docker: [2016-01-29T06:42:48+00:00] INFO: Chef-client pid: 207
    docker: [2016-01-29T06:42:50+00:00] INFO: Setting the run_list to ["recipe[runit]"] from CLI options
    docker: [2016-01-29T06:42:50+00:00] INFO: Run List is [recipe[runit]]
    docker: [2016-01-29T06:42:50+00:00] INFO: Run List expands to [runit]
    docker: [2016-01-29T06:42:50+00:00] INFO: Starting Chef Run for 1f87b0cf1fe7
    docker: [2016-01-29T06:42:50+00:00] INFO: Running start handlers
    docker: [2016-01-29T06:42:50+00:00] INFO: Start handlers complete.
    docker: [2016-01-29T06:42:52+00:00] INFO: Processing service[runit] action nothing (runit::default line 20)
    docker: [2016-01-29T06:42:52+00:00] INFO: Processing execute[start-runsvdir] action nothing (runit::default line 24)
    docker: [2016-01-29T06:42:52+00:00] INFO: Processing execute[runit-hup-init] action nothing (runit::default line 33)
    docker: [2016-01-29T06:42:52+00:00] INFO: Processing apt_package[runit] action install (runit::default line 64)
    docker: [2016-01-29T06:42:55+00:00] INFO: Processing cookbook_file[/var/chef/cache/preseed/runit/runit-2.1.1-6.2ubuntu3.seed] action create (dynamically defined)
    docker: [2016-01-29T06:42:55+00:00] INFO: cookbook_file[/var/chef/cache/preseed/runit/runit-2.1.1-6.2ubuntu3.seed] created file /var/chef/cache/preseed/runit/runit-2.1.1-6.2ubuntu3.seed
    docker: [2016-01-29T06:42:55+00:00] INFO: cookbook_file[/var/chef/cache/preseed/runit/runit-2.1.1-6.2ubuntu3.seed] updated file contents /var/chef/cache/preseed/runit/runit-2.1.1-6.2ubuntu3.seed
    docker: [2016-01-29T06:42:55+00:00] INFO: apt_package[runit] pre-seeding package installation instructions
==> docker: Killing the container: 1f87b0cf1fe71f07b580ae6b18415a79c23a1a32a40f5f0366be90f160977a50
Build 'docker' errored: Error executing Chef: Non-zero exit status: 137

我不完全确定导致代码137的原因,任何帮助都会受到赞赏。

更新1

我包含了Chef的完整调试输出的要点。它更冗长,主要是因为它似乎是Ohai为获取信息所做的所有尝试。

https://gist.github.com/jrstarke/4c5f3b432aaee70c7f77

此处没有任何引用似乎表明存在内存不足错误,至少在docker主机上是这样。

3 个答案:

答案 0 :(得分:1)

经过多次挖掘,我发现了问题。在cloudfoundry-incubator/garden-linux的问题中找到了潜在的问题和解决方案。

显然,作为设置过程的一部分,runit的一个后init脚本执行kill -s HUP 1。为什么我不完全确定,但正如他们在那里所指出的那样,在trap '' HUPapt-get install runit之前做trap HUP之后就完全解决了我的问题。

答案 1 :(得分:0)

检查主机上的OOM日志。您还可以使用execute_command配置值将日志级别转为调试。

答案 2 :(得分:0)

这个答案似乎对我有用:a valid date format to work

我必须通过转到Docker选项卡>来增加分配给docker的内存资源。偏好>先进

https://stackoverflow.com/a/42398166/2878244