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