Docker
如何使用 python docker-py 連接到 AWS ECR
從命令行執行時,要從特定系統資料庫中提取,我可以執行以下命令:
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)
傳遞你的
registry
as theregClient = dockerClient.login(username, password, registry=registry)
Python還是外殼?
是正確的方向還是我應該嘗試完全使用 shell 腳本來實現它?(Python 對於描述每個系統資料庫內容的 boto 呼叫特別有價值)
使用 Python。