Packer Docker Builder: настройка оболочки для запуска docker?

#bash #shell #docker #builder

#bash #оболочка #docker #Конструктор

Вопрос:

я хочу предоставить образ docker с помощью docker и ansible. Я хочу использовать alpine в качестве базового образа. Некоторые образы docker, такие как Alpine, не предоставляют «/bin/bash». Когда packer запускает этот образ docker, он продолжает запускать / bin/ bash. Это приведет к сбою процесса сборки:

dockerbuild.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» или без явной оболочки:

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

Знаете ли вы, как я могу сообщить packer, чтобы он не запускал / bin / bash ?

Ответ №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"
      ]
    }
  ]
}