[英]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.