عند تشغيل من سطر الأوامر ، لسحب من سجل معين يمكنني تشغيل هذه الأوامر:
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.comdocker pull ACCTID.dkr.ecr.us-west-2.amazonaws.com/REPO/NAME:TAGNAME
إذا كنت أريد سجلا مختلفا ، فأقوم بتغيير المنطقة أو اسم الملف الشخصي
تحاول هذا مع عامل الميناء-الحمر ، لدي
import boto3import dockerdockerClient = 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
يرفض الاتصال مع:
اسم مستخدم أو كلمة مرور سيئة
من هناك ، بمجرد أن يعمل ذلك ، سأرغب في استخدام سحب/دفع عميل عامل الميناء لنقل الصور بين السجلات.
هو الاتجاه الصحيح أو ينبغي أن أحاول تنفيذ هذا تماما مع البرامج النصية قذيفة? (كان بيثون قيمة خاصة للمكالمات بوتو لوصف ما هو في كل التسجيل)
مثال رمز كامل يعمل:
#!/usr/bin/env python3import base64, docker, boto3docker_client = docker.from_env(version='1.24')ecr_client = boto3.client('ecr', region_name='eu-west-1')token = ecr_client.get_authorization_token()username, password = base64.b64decode(token['authorizationData'][0]['authorizationToken']).decode().split(':')registry = token['authorizationData'][0]['proxyEndpoint']docker_client.login(username, password, registry=registry)
وبالطبع يجب أن يكون لديك أوراق اعتماد أوس الخاصة بك أولا ، على سبيل المثال.:
export AWS_ACCESS_KEY_ID=youraccesskeyexport AWS_SECRET_ACCESS_KEY=yoursecretaccesskey
لقد واجهت نفس المشكلة ، عليك أن:
فك الشفرة من القاعدة 64
تحويل من بايت إلى سلسلة
فصل تسجيل الدخول 'أوس'
password = (base64.b64decode(response['authorizationData'][0]['authorizationToken'])).decode("utf-8").split(':')[-1]
Ollie
May 2, 2022, 6:36pm
#4
لقد وجدت أنه من الأسهل لتمرير auth_config
مع اسم المستخدم / كلمة المرور عند دفع الصورة إلى إكر.
import boto3import base64import dockersess = boto3.Session()resp = sess.client('ecr').get_authorization_token()token = resp['authorizationData'][0]['authorizationToken']token = base64.b64decode(token).decode()username, password = token.split(':')auth_config = {'username': username, 'password': password}# get local docker clientclient = docker.from_env()# build/tag image here....# then override the docker client config by passing auth_configclient.image.push(<image name>, auth_config=auth_config)
آمل أن يساعد هذا شخص ما!
فشل تسجيل الدخول دوكركلينت يرفض الاتصال باسم المستخدم أو كلمة المرور السيئة;
توقيع الوظيفة التي تتصل بها لتسجيل الدخول هو:
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
كما email
منذ email
هي المعلمة الثالثة. أقترح عليك التغيير إلى شيء مثل:
regClient = dockerClient.login(username, password, registry=registry)
بيثون أو شل? هو الاتجاه الصحيح أو ينبغي أن أحاول تنفيذ هذا تماما مع البرامج النصية قذيفة? (كان بيثون قيمة خاصة للمكالمات بوتو لوصف ما هو في كل التسجيل)
الذهاب مع الثعبان.
هناك قضية مفتوحة في ال docker-py
مشروع حول هذا الموضوع ، وعملت واحدة من الحلول بالنسبة لي-تجريد الرائدة https://
من التسجيل عند إجراء تسجيل دخول عامل الميناء:
registry_url = token['authorizationData'][0]['proxyEndpoint'].replace("https://", "")