如何從私有儲存庫擷取 Docker 映像,並在 Elastic Beanstalk Docker 平台中使用?
我想從私有儲存庫中提取 Docker 映像,並在我的 Elastic Beanstalk 平台中使用。
簡短說明
從私有儲存庫中擷取映像時,可能會從 Elastic Beanstalk 執行個體收到下列錯誤:
來自 /var/log/ecs/ecs-agent.log[CannotPullContainerError] 的錯誤訊息 來自 daemon: pull access 的錯誤回應拒絕 {username}/{repo};儲存庫不存在或者請求 require 'docker login': 遭拒:請求存取資源遭拒 module=docker_client.go
當私有註冊表和 Elastic Beanstalk 之間有驗證差距時,就會發生這個錯誤。若要使用私有儲存庫中的映像時,Elastic Beanstalk 必須向託管私有儲存庫的線上註冊表進行驗證。它必須先進行驗證,然後才能從私有儲存庫擷取和部署映像。有兩個選項可擷取和儲存 Elastic Beanstalk 環境的認證,以便向私有儲存庫進行驗證:
- AWS Systems Manager (SSM) 參數存放區
- Dockerrun.aws.json 檔案
解決方法
若要使用 Dockerrun.aws.json 檔案從私有儲存庫擷取 Docker 映像檔,請完成以下步驟:
- 產生有效的身分驗證權杖
- 建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體並存放驗證檔案
- 建立 Dockerrun.aws.json v2 檔案
產生有效的身分驗證權杖
**注意:**如果執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確定您執行的是最新版本的 AWS CLI。
-
執行以下命令,在您的機器上安裝 Docker:
$ brew install docker
-
在 dockerhub 建立一個帳戶。
-
建立儲存庫並將影像傳輸至儲存庫。
-
執行 Docker login 命令:
$ Docker login
-
使用以下命令,建立一個名為 credentials.env 的檔案:
$ vi credentials.env
-
將下列憑證新增至先前建立的檔案:
注意:確保將所有範例字串替換為您指定的值,然後儲存文件並退出編輯器模式。
DOCKER_USERNAME=example-user-name DOCKER_PASSWORD=example-password DOCKER_REGISTRY=https://index.docker.io/v1/
-
執行下列命令:
docker run -it --rm \ -env-file=credentials.env \ v "$(pwd):/opt/data/" \ v "/var/run/docker.sock:/var/run/docker.sock" \ codeship/dockercfg-generator /opt/data/dockercfg
-
擷取 .dockercfg 檔案:
$ cat /opt/data/dockercfg
範例輸出:
{ "https://index.docker.io/v1/ ": { "auth": '**************************AMTE=" }, "HttpHeaders": { "User-Agent": "Docker-Client/18.03.1-ce (linux)" } }
**注意:**請確定將 dockercfg 檔案包含在應用程式來源套件。
建立 Amazon S3 儲存貯體並存放驗證檔案
建立一個安全的 Amazon S3 儲存貯體並傳輸 .dockercfg檔案至儲存貯體。請確定下列事項:
- Amazon S3 儲存貯體託管在與使用該儲存貯體的環境相同的 AWS 區域中。Elastic Beanstalk 無法從託管在其他區域的 Amazon S3 儲存貯體下載檔案。
- 執行個體設定檔中的 AWS 身分和 Access Management (IAM) 角色會被授與 s****3:GetObject 操作權限。
建立 Dockerrun.aws.json v2 檔案
透過執行下列命令建立 Docker Run.aws.json v2 檔案,並在 authentication 參數下新增 Amazon S3 儲存貯體資訊:
- 針對 bucket 參數,請新增您的 Amazon S3 儲存貯體資訊。
- 針對 image 參數,請將您的映像名稱與標籤一起加入。這可以從您的 dockerhub 帳戶中擷取。
{ "AWSEBDockerrunVersion": 2, "authentication": { "bucket": "example-bucket-name", "key": ".dockercfg" }, "volumes": [ { "name": "php-app", "host": { "sourcePath": "/var/app/current/php-app" } }, { "name": "nginx-proxy-conf", "host": { "sourcePath": "/var/app/current/proxy/conf.d" } } ], "containerDefinitions": [ { "name": "php-app", "image": "example-image-name", "essential": true, "memory": 128, "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true }, { "sourceVolume": "awseb-logs-php-app", "containerPath": "/var/log/sample-app" } ] }, { "name": "nginx-proxy", "image": "nginx", "essential": true, "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], "links": [ "php-app" ], "mountPoints": [ { "sourceVolume":"php-app", "containerPath": "/var/www/html", "readOnly": true }, { "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" }, { "sourceVolume": "nginx-proxy-conf", "containerPath": "/etc/nginx/conf.d", "readOnly": true } ] } ] }
**注意:**上述指令可讓您的 Elastic Beanstalk 執行個體成功透過線上註冊表進行驗證。
相關資訊
相關內容
- 已提問 2 年前lg...
- 已提問 10 個月前lg...
- AWS 官方已更新 5 個月前
- AWS 官方已更新 5 個月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 8 個月前