首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >打包器docker builder在docker镜像中配置docker

打包器docker builder在docker镜像中配置docker
EN

Stack Overflow用户
提问于 2019-04-17 22:50:14
回答 1查看 678关注 0票数 4

我正在尝试使用packer提供docker:dind镜像,它将构建另一个docker镜像,并使用以下构建脚本在docker中运行它:

代码语言:javascript
运行
复制
{
  "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"
      }
    ]
  ]
}

当我运行这个脚本时,它失败了,错误如下:

代码语言:javascript
运行
复制
$ 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.

问题是,当packer启动容器时,它会覆盖默认的入口点"dockerd-entrypoint.sh“,该入口点是在docker:dind镜像中使用自己的入口点"/bin/sh”配置的。这会阻止docker内部docker进程启动,并且shell脚本无法执行。

我尝试过用下面的选项更改入口点和run_command,但在第一种情况下没有效果(我假设它将在镜像提交时在最后更新),而在后一种情况下它不能执行任何脚本。

代码语言:javascript
运行
复制
"changes": [
  "ENTRYPOINT [dockerd-entrypoint.sh]"
],
"run_command": ["-d", "-i", "-t", "--entrypoint=dockerd-entrypoint.sh", "--", "{{.Image}}"]

另一种选择是将"dockerd-entrypoint.sh“作为内联shell脚本运行(第一个),但这会阻塞进程,并且不会执行后续步骤。

我已经没有选择了,我需要一些帮助来理解它是如何工作的,以及是否有一些解决方案。

EN

回答 1

Stack Overflow用户

发布于 2019-04-18 01:49:53

在您的inline部分,首先使用类似dockerd-entrypoint.sh & sleep 5的命令在后台运行docker守护进程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55730435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档