如何使用CodeBuild构建Docker镜像?

6
我想从Dockerfile构建一个Docker镜像,并将此镜像发布到AWS ECR(Docker注册表)。
要成功完成这个操作,需要在CodeBuild容器内部访问docker build和docker push命令。但问题是在Docker容器中安装Docker会导致错误,例如“无法连接到unix:///var/run/docker.sock上的Docker守护程序。 Docker守护程序是否正在运行?”
请问如何解决这个问题呢?是否有一种方法可以使用CodeBuild来从Dockerfile构建Docker映像?
4个回答

9
我找到了一个解决方案。 请参照此链接中的代码,并且不要忘记在“环境”配置屏幕中启用“特权”。

请编辑您的问题,并至少包括解决方案的摘要。链接可能随时失效,使此帖子无用。 - Enissay
1
如果有人想要找到设置,目前在“构建项目”下面,点击“编辑”,然后选择“编辑环境”,再点击“覆盖图像”,最后选择“特权”(如果您想要构建Docker镜像或希望您的构建获得提升的权限,请启用此选项)。 - Jacob Joy

2
只需在 CodeBuild 设置中点击“特权模式”按钮即可。 特权模式

2
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

1

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

  • 对于Image,选择aws/codebuild/standard:4.0
  • 因为您使用此构建项目来构建Docker镜像,所以选择Privileged

并提供以下注释:

注意

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

如果仍然遇到问题,则AWS::CodeBuild::Project EnvironmentPriviledgedMode部分在CloudFormation文档中包含以下初始化Docker守护程序的步骤:

您可以通过在构建规范文件(buildspec)的安装阶段添加以下命令集之一来初始化 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,前一个命令不起作用,则将-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"

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接