Saat menjalankan dari baris perintah, untuk menarik dari registri tertentu saya dapat menjalankan perintah ini:
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
Jika saya ingin registri yang berbeda, saya mengubah wilayah atau nama profil
Mencoba ini dengan docker-py, Saya Punya
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)
tapi dockerClient
menolak koneksi dengan:
nama pengguna atau kata sandi buruk
Dari sana, setelah itu berfungsi, saya ingin menggunakan Tarik/Dorong klien buruh pelabuhan untuk memindahkan gambar di antara pendaftar.
Apakah arah yang benar atau haruskah saya mencoba menerapkan ini sepenuhnya dengan skrip shell? (Python sangat berharga untuk panggilan boto untuk menggambarkan apa yang ada di setiap registri)
Contoh kode lengkap yang berfungsi:
#!/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)
Dan tentu saja Anda harus menyiapkan kredensial AWS Anda terlebih dahulu, mis.:
export AWS_ACCESS_KEY_ID=youraccesskeyexport AWS_SECRET_ACCESS_KEY=yoursecretaccesskey
Saya telah menghadapi masalah yang sama, Anda harus:
decode dari base64
konversi dari byte ke string
pisahkan login 'AWS'
password = (base64.b64decode(response['authorizationData'][0]['authorizationToken'])).decode("utf-8").split(':')[-1]
Saya telah menemukan untuk menjadi termudah untuk lulus auth_config
dengan nama pengguna / kata sandi saat mendorong gambar ke ECR.
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)
Semoga ini bisa membantu seseorang!
Login Gagal dockerClient menolak koneksi dengan & quot;Nama Pengguna atau kata sandi yang buruk"
Tanda tangan dari fungsi yang Anda panggil untuk login adalah:
def login(self, username, password=None, email=None, registry=None, reauth=False, insecure_registry=False, dockercfg_path=None):
Perhatikan posisi registry
parameter. Ini adalah keempat dalam daftar. Jadi panggilan Anda:
regClient = dockerClient.login(username, password, registry)
Apakah melewati Anda registry
sebagai email
sejak email
adalah parameter ketiga. Sarankan Anda mengubah sesuatu seperti:
regClient = dockerClient.login(username, password, registry=registry)
Python atau shell? Apakah arah yang benar atau haruskah saya mencoba menerapkan ini sepenuhnya dengan skrip shell? (Python sangat berharga untuk panggilan boto untuk menggambarkan apa yang ada di setiap registri)
Pergi dengan Python.
Harley
April 29, 2022, 2:31pm
#6
Ada sebuah masalah terbuka dalam docker-py
proyek tentang ini, dan salah satu solusi mereka berhasil untuk saya-melucuti yang terdepan https://
dari registri saat melakukan login Docker:
registry_url = token['authorizationData'][0]['proxyEndpoint'].replace("https://", "")
Maxx
April 29, 2022, 2:35pm
#7