【问题标题】:How can I build a Docker image with Codebuild?如何使用 Codebuild 构建 Docker 映像?
【发布时间】:2021-10-07 06:28:53
【问题描述】:

我想从 Dockerfile 构建一个 Docker 映像,并将此映像发布到 AWS ECR(Docker 注册表)。

为了成功,我需要从 Codebuild 容器中访问 docker builddocker push,这是有问题的(在 docker 容器中安装 docker 会导致错误,例如 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?)。

请问如何继续做这样的事情?有没有办法使用 codebuild 从 Dockerfile 构建 Docker 镜像?

【问题讨论】:

    标签: docker aws-codebuild amazon-ecr docker-in-docker


    【解决方案1】:

    我找到了解决方案。 关注this link获取代码,别忘了在“环境”配置界面开启“Priviledged”。

    【讨论】:

      【解决方案2】:

      Docker sample for CodeDeploy 列出了以下步骤:

      • 对于图像,选择 aws/codebuild/standard:4.0
      • 由于您使用此构建项目来构建 Docker 映像,因此请选择 Privileged

      并提供以下注释:

      注意

      默认情况下,Docker 容器不允许访问任何设备。特权模式授予构建项目的 Docker 容器对所有设备的访问权限。有关详细信息,请参阅 Docker 文档网站上的运行时特权和 Linux 功能。

      如果您仍然遇到问题,AWS::CodeBuild::Project Environment 的 CloudFormation 文档的 PriviledgedMode 部分包含以下用于初始化 Docker 守护程序的步骤:

      您可以在构建的安装阶段初始化 Docker 守护程序,方法是将以下一组命令添加到构建规范文件的安装阶段:

      如果操作系统的基础镜像是 Ubuntu Linux:

      - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://0.0.0.0:2375 --storage-driver=overlay&

      - timeout 15 sh -c "until docker info; do echo .; sleep 1; done"

      如果操作系统的基础镜像是Alpine Linux,上一条命令不起作用,在timeout中加上-t参数:

      - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://0.0.0.0:2375 --storage-driver=overlay&

      - timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"

      【讨论】:

        猜你喜欢
        • 2021-02-06
        • 1970-01-01
        • 2022-08-03
        • 1970-01-01
        • 1970-01-01
        • 2016-02-19
        • 1970-01-01
        • 1970-01-01
        • 2019-07-05
        相关资源
        最近更新 更多