Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何從私有儲存庫擷取 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 年前
- 已提問 1 年前
- 已提問 1 年前
- 已提問 2 年前
- 已提問 2 年前
