Packer Docker Builder:为docker run配置shell?

问题描述 投票:1回答:1

我想用docker和ansible配置一个docker镜像。我想用alpine作为基本图像。一些码头图像如Alpine不提供“/ bin / bash”。当打包器运行该docker镜像时,它会一直启动/ bin / bash。这将使构建过程崩溃:

docker build.json:

{
  "builders": [
    {
      "type": "docker",
      "image": "alpine:3.8",
      "commit": true
    }
  ],
  "provisioners": [
    {
      "type": "ansible",
      "user": "root",
      "playbook_file": "playbook.yml",
      "extra_arguments": [
        "--extra-vars",
        "ansible_connection=docker"
      ]
    }
  ]
}

错误:

$> packer build dockerbuild.json
...
==> docker: Starting docker container...
    docker: Run command: docker run -v /Users/engi/.packer.d/tmp/packer-docker014300196:/packer-files -d -i -t alpine:3.8 /bin/bash
==> docker: Error running container: Docker exited with a non-zero exit status.
==> docker: Stderr: docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown.

我可以使用“/ bin / sh”手动运行图像,也可以不使用显式shell:

docker run --rm -i -t alpine:3.8 /bin/sh
docker run --rm -i -t alpine:3.8

你知道我怎么能打包机告诉你不要开始/ bin / bash吗?

bash shell docker builder
1个回答
1
投票

我在docs(惊喜)找到了解决方案:run_command

https://www.packer.io/docs/builders/docker.html

这对我有用:

{
  "builders": [
    {
      "type": "docker",
      "image": "alpine:3.8",
      "commit": true,
      "run_command": ["-d", "-i", "-t", "{{.Image}}", "/bin/sh"]
    }
  ],
  "provisioners": [
    {
      "type": "ansible",
      "user": "root",
      "playbook_file": "playbook.yml",
      "extra_arguments": [
        "--extra-vars",
        "ansible_connection=docker"
      ]
    }
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.