Docker

如何使用 python docker-py 連接到 AWS ECR

  • December 31, 2020

從命令行執行時,要從特定系統資料庫中提取,我可以執行以下命令:

dockerCommand=$("aws ecr get-login --profile profileName --region us-west-2")
$dockerCommand  (which looks like docker login -u AWS -p ..longPassword.. -e none https://ACCTID.dkr.ecr.us-west-2.amazonaws.com
docker pull ACCTID.dkr.ecr.us-west-2.amazonaws.com/REPO/NAME:TAGNAME

如果我想要不同的系統資料庫,我會更改 region 或 profileName

用 docker-py 試試這個,我有

import boto3
import docker
dockerClient = docker.from_env()

session = boto3.setup_default_session(profile_name='vzw')
client = session.client('ecr', region_name='us-west-2')

token = client.get_authorization_token(registryIds=[registryId])

username = 'AWS'
password = token['authorizationData'][0]['authorizationToken']
registry = token['authorizationData'][0]['proxyEndpoint']
regClient = dockerClient.login(username, password, registry)

dockerClient拒絕與:

使用者名或密碼錯誤

從那裡開始,一旦工作正常,我將想使用 docker 客戶端拉/推在系統資料庫之間移動圖像。

是正確的方向還是我應該嘗試完全使用 shell 腳本來實現它?(Python 對於描述每個系統資料庫內容的 boto 呼叫特別有價值)

登錄失敗

dockerClient 拒絕連接“錯誤的使用者名或密碼”

您呼叫登錄的函式的簽名是:

def login(self, username, password=None, email=None, registry=None,
         reauth=False, insecure_registry=False, dockercfg_path=None):

注意registry參數的位置。它在列表中排名第四。所以你的電話:

regClient = dockerClient.login(username, password, registry)

傳遞你的registryas the emailsinceemail是第三個參數。建議您更改為:

regClient = dockerClient.login(username, password, registry=registry)

Python還是外殼?

是正確的方向還是我應該嘗試完全使用 shell 腳本來實現它?(Python 對於描述每個系統資料庫內容的 boto 呼叫特別有價值)

使用 Python。

引用自:https://serverfault.com/questions/856485