сборщик сборщика докера - PullRequest
4 голосов
/ 17 апреля 2019

Я пытаюсь подготовить Docker: образ dind с пакером, который создаст другой образ Docker и запустит его в Docker с помощью следующего сценария сборки:

{
  "builders": [
    {
      "type": "docker",
      "image": "docker:dind",
      "privileged": true,
      "commit": "true"
    }
  ],
  "provisioners": [
    {
      "type": "file",
      "source": "../docker/",
      "destination": "/docker"
    },
    {
      "type": "shell",
      "inline": [
        "docker build -t my-service /docker"
      ]
    }
  ],
  "post-processors": [
    [
      {
        "type": "docker-tag",
        "repository": "my-service",
        "tag": "latest"
      }
    ]
  ]
}

Когда я запускаю этот скрипт, он завершается с ошибкой:

$ packer build build.json
docker output will be in this color.

==> docker: Creating a temporary directory for sharing data...
==> docker: Pulling Docker image: docker:dind
    docker: dind: Pulling from library/docker
    docker: Digest: sha256:21fe82c6e54e2db31e64f79ec7ac75c6a8f7469cdc56687ced97d6fc3e75e6cd
    docker: Status: Image is up to date for docker:dind
==> docker: Starting docker container...
    docker: Run command: docker run --privileged -v C:\Users\user\packer.d\tmp:/packer-files -d -i -t --entrypoint=/bin/sh -- docker:dind
    docker: Container ID: 7fa2ae91eaf6111ce6d0567f1e523100c777311449454b0df8d6d49c84c477d6
==> docker: Using docker communicator to connect: 172.17.0.2
==> docker: Uploading ../docker/ => /docker
==> docker: Provisioning with shell script: C:\Users\user\AppData\Local\Temp\packer-shell164551847
==> docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
==> docker: Killing the container: 7fa2ae91eaf6111ce6d0567f1e523100c777311449454b0df8d6d49c84c477d6
Build 'docker' errored: Script exited with non-zero exit status: 1.Allowed exit codes are: [0]

==> Some builds didn't complete successfully and had errors:
--> docker: Script exited with non-zero exit status: 1.Allowed exit codes are: [0]

==> Builds finished but no artifacts were created.

Проблема в том, что, когда упаковщик запускает контейнер, он переопределяет точку входа по умолчанию ["dockerd-entrypoint.sh"], которая была настроена в docker: dind образ с собственной точкой входа ["/ bin / sh"]. Это предотвращает запуск docker внутри процесса docker, и сценарий оболочки не может быть выполнен.

Я попытался изменить точку входа и команду run_command с указанными ниже параметрами, но в первом случае это не имеет никакого эффекта (я предполагаю, что оно будет обновлено в конце, когда изображение будет зафиксировано), а во втором случае он не сможет выполнить никаких сценариев.

"changes": [
  "ENTRYPOINT [dockerd-entrypoint.sh]"
],
"run_command": ["-d", "-i", "-t", "--entrypoint=dockerd-entrypoint.sh", "--", "{{.Image}}"]

Другим вариантом было запустить «[dockerd-entrypoint.sh]» в качестве встроенного сценария оболочки (сначала), но это заблокировало процесс и не выполнило следующие шаги.

У меня заканчиваются варианты, и мне нужна помощь, чтобы понять, как это работает и есть ли какое-то решение.

1 Ответ

0 голосов
/ 17 апреля 2019

В вашем разделе inline начните с запуска демона docker в фоновом режиме с чем-то вроде dockerd-entrypoint.sh & sleep 5.

...