繁体   English   中英

如何使用 Codebuild 构建 Docker 映像?

[英]How can I build a Docker image with Codebuild?

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

In order to succeed, I need to have access to docker build and docker push from within the Codebuild container, which is problematic (installing docker inside a docker container causes errors such as Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? )。

请问如何继续做这样的事情? 有什么方法可以使用 codebuild 从 Dockerfile 构建 Docker 图像?

我找到了解决方案。 按照此链接获取代码,不要忘记在“环境”配置屏幕中启用“特权”。

CodeDeploy 的Docker 示例列出了以下步骤:

  • 对于图像,选择aws/codebuild/standard:4.0
  • 因为您使用此构建项目来构建 Docker 映像,所以 select 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"

只需单击 CodeBuild 设置特权模式中的“特权模式”按钮

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM