Saya mencoba untuk mendorong gambar buruh pelabuhan ke registri Amazon ECR. Saya menggunakan klien buruh pelabuhan Docker versi 1.9.1, build a34a1d5
. Saya menggunakan aws ecr get-login --region us-east-1
untuk mendapatkan kredibilitas login buruh pelabuhan. Kemudian saya berhasil masuk dengan kredit tersebut sebagai berikut:
docker login -u AWS -p XXXX -e none https://####.dkr.ecr.us-east-1.amazonaws.com
WARNING: login credentials saved in /Users/ar/.docker/config.json
Login Succeeded
Tetapi ketika saya mencoba untuk mendorong gambar saya, saya mendapatkan kesalahan berikut:
$ docker push ####.dkr.ecr.us-east-1.amazonaws.com/image:latest
The push refers to a repository [####.dkr.ecr.us-east-1.amazonaws.com/image] (len: 1)
bcff5e7e3c7c: Preparing
Post https://####.dkr.ecr.us-east-1.amazonaws.com/v2/image/blobs/uploads/: no basic auth credentials
Saya memastikan bahwa pengguna aws memiliki izin yang benar. Saya juga memastikan bahwa repositori memungkinkan pengguna untuk mendorongnya. Hanya untuk memastikan itu bukan masalah saya mengatur registri untuk memungkinkan semua pengguna akses penuh. Tidak ada yang mengubah "no basic auth credentials"
kesalahan. Saya tidak tahu bagaimana cara memulai debug ini karena semua lalu lintas dienkripsi.
MEMPERBARUI
Jadi saya memiliki sedikit momen Homer Simpson D'Oh ketika saya menyadari akar penyebab masalah saya. Saya memiliki akses ke beberapa akun AWS. Meskipun saya menggunakan aws configure
untuk mengatur kredensial saya untuk akun di mana saya telah menyiapkan repositori saya aws cli sebenarnya menggunakan variabel lingkungan AWS_ACCESS_KEY_ID
dan AWS_SECRET_ACCESS_KEY
. Jadi ketika saya melakukannya aws ecr get-login
itu mengembalikan login untuk akun yang salah. Saya gagal memperhatikan bahwa nomor akun berbeda hingga saya baru kembali sekarang untuk mencoba beberapa jawaban yang diajukan. Ketika saya menghapus variabel lingkungan semuanya berfungsi dengan benar. Saya kira moto ceritanya adalah jika Anda menekan kesalahan ini, pastikan bahwa repositori yang Anda masuki cocok dengan tag yang telah Anda terapkan pada gambar.
sumber
Jawaban:
jika Anda menjalankannya
$(aws ecr get-login --region us-east-1)
semua akan dilakukan untuk Andasumber
docker login
perintah akan dijalankan.Dalam kasus saya ini adalah bug dengan Docker untuk Windows dan dukungan mereka untuk Windows Credential Manager.
Buka
~/.docker/config.json
dan hapus"credsStore": "wincred"
entri.Ini akan menyebabkan kredensial dituliskan
config.json
secara langsung. Anda harus masuk lagi setelahnya.Anda dapat melacak bug ini melalui tiket # 22910 dan # 24968 di GitHub.
sumber
~/.docker
berarti.docker
di direktori home Anda. Coba%HOMEDRIVE%%HOMEPATH%\.docker
Jika Anda menggunakan profil, jangan lupa untuk lulus
--profile=XXX
keaws ecr get-login
.sumber
Saya punya masalah ini juga. Apa yang terjadi dengan saya adalah saya lupa menjalankan perintah yang dikembalikan kepada saya setelah saya berlari
Perintah ini mengembalikan gumpalan besar, yang termasuk
docker login
perintah di sana! Saya tidak sadar. Seharusnya mengembalikan sesuatu seperti ini:Salin dan tempel perintah ini & kemudian jalankan perintah push docker Anda yang terlihat seperti ini:
sumber
Ini seharusnya bekerja bahkan tanpa membuka izin. Lihat dokumentasi: Otentikasi Pendaftaran Pribadi .
[Sunting: sebenarnya, saya juga memiliki masalah izin saat melakukan tes kedua. Lihat push Docker ke gagal repo pribadi AWS ECR dengan JSON salah format .]
Meskipun demikian saya memiliki masalah yang sama; Saya tidak tahu mengapa, tetapi saya berhasil menggunakan mekanisme auth yang bertele-tele yang dijelaskan dalam dokumen untuk mendapatkan-otorisasi-token
AWS CLI dan versi Docker:
Dapatkan token autentikasi ('kata sandi docker').
Catatan: My ~ / .aws / config menentukan wilayah default yang berbeda, jadi saya perlu mengatur secara eksplisit
--region us-east-1
.Masuk secara interaktif (ubah
############
ke id akun AWS Anda):Dorong gambar (dengan asumsi Anda membuat gambar buruh pelabuhan
test
):sumber
aws ecr get-authorization-token > config.json
dan kemudian membukanya di editor teks favorit Anda untuk menyalin dan menempel sesuka hatiCoba dengan:
sebelum mendorong.
sumber
no basic auth credentials Invalid IPv6 URL
Memperbarui
Karena AWS CLI versi 2 -
aws ecr get-login
sudah usang dan metode yang benar adalahaws ecr get-login-password
.Karena itu jawaban yang benar dan diperbarui adalah sebagai berikut:
docker login -u AWS -p $(aws ecr get-login-password --region us-east-1) xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com
sumber
unknown flag: --region
Jika itu membantu siapa pun ...
Masalah saya adalah saya harus menggunakan
--profile
opsi untuk mengautentikasi dengan profil yang tepat dari file kredensial.Selanjutnya, saya telah menonaktifkan
--region [region_name]
perintah, yang juga memberikan kesalahan "tidak ada autentikasi dasar".Solusi bagi saya adalah mengubah perintah saya dari ini:
aws ecr get-login
Untuk ini:
aws --profile [profile_name] ecr get-login --region [region_name]
Contoh:
aws --profile foo ecr get-login --region us-east-1
Semoga itu bisa membantu seseorang!
sumber
AWS_PROFILE=myprofile aws ecr get-login
dan itu tidak berhasil tetapi memperkenalkan profil aws dengan--profile
argumen membuat trik!Ada bug yang dikenal di manajer kredensial yang meringis pada Windows. Menghapus 'https: //' dari perintah login yang dihasilkan menyelesaikan ini.
dari pada
Lihat juga halaman pemecahan masalah .
sumber
Saya mengalami masalah yang sama.
Menghasilkan kredensial AWS baru (kunci akses) dan mengkonfigurasi ulang AWS CLI dengan kredensial baru menyelesaikan masalah.
Sebelumnya,
aws ecr get-login --region us-east-1
dihasilkan perintah login buruh pelabuhan dengan URL registri EC yang tidak valid.sumber
Pada Windows di PowerShell , gunakan:
sumber
Saya memiliki masalah ini dengan penyebab yang berbeda: Saya perlu mendorong ke registri yang tidak terkait dengan Akun AWS saya (registri ECR klien). Klien telah memberi saya akses di bawah tab Izin untuk registri, dengan menambahkan ID IAM saya (misalnya,
arn:aws:iam::{AWS ACCT #}:user/{Username}
) sebagai Kepala Sekolah. Saya mencoba masuk dengan langkah-langkah biasa:Yang tentu saja menghasilkan
no basic auth credentials
. Ternyata ,aws ecr get-login
Anda masuk ke ECR untuk registri terkait login Anda , yang masuk akal dalam retrospeksi. Solusinya adalah memberi tahuaws ecr get-login
registri mana yang ingin Anda masuki.Setelah itu,
docker push
berfungsi dengan baik.sumber
--profile
? Saya memiliki akun pribadi tetapi saya mencoba untuk mendorong ke akun perusahaan. Dengan kata lain, di mana saya menemukanprofilename
Kemudian sesuai dengan Perintah Perintah Dorong ECR, potong dan rekatkan perintah berikut
eval $(aws ecr get-login --region us-east-1)
tambahkan --profile jika Anda menggunakan beberapa Akun AWS
eval $(aws ecr get-login --region us-east-1 --profile your-profile)
docker build -t image-name .
docker tag image-name:latest ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest
docker push ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest
Jika terjadi kesalahan, pastikan Anda menjalankan semua perintah lagi! Kredensial yang Anda gunakan
aws ecr get-login
bersifat sementara dan akan kedaluwarsa.sumber
your-profile
?~/.aws/config
dan~/.aws/credentials
file.Dalam kasus saya, setelah berjalan
aws ecr get-login --no-include-email --region *****
, saya hanya menyalin output dari perintah itu dengan bentukdocker login -u *** -p ************
, dan Anda menempelkannya di prompt. Dorongan itu berlanjut.sumber
Dokumen AWS memberitahu Anda untuk menjalankan perintah berikut (untuk ap-tenggara-2 wilayah)
Ketika saya menabrak masalah ini, tidak jelas bagi saya berdasarkan pada dokumen bahwa Anda perlu memasukkan hasil dari perintah ini ke terminal dan menjalankannya.
Perbaikan yang berhasil bagi saya adalah menyalin hasilnya ke clipboard dengan
Rekatkan hasilnya ke baris perintah dan jalankan
sumber
Setelah menjalankan perintah ini:
(aws ecr get-login --no-include-email --region us-west-2)
jalankan saja perintah masuk buruh pelabuhan dari output
docker login -u AWS -p epJ....
adalah cara buruh pelabuhan itu masuk ke ECR
sumber
Kesalahan ini umumnya dilemparkan jika login ecr gagal. Saya menggunakan sistem windows dan saya menggunakan "Powershell" dalam mode Administrator untuk masuk ke ECR terlebih dahulu.
Ini akan menghasilkan "Login berhasil".
sumber
Saya menghadapi masalah yang sama dan kesalahan yang saya lakukan adalah menggunakan jalur repo yang salah
misalnya:
docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest
Di jalur di atas, di sinilah saya melakukan kesalahan: Sebagai
"dkr.ecr.us-east-1.amazonaws.com"
ganti"west"
. Saya menggunakan "east"
. Setelah saya memperbaiki kesalahan saya, saya dapat mendorong gambar dengan sukses.sumber
Perintah buruh pelabuhan yang diberikan oleh aws-cli sedikit ...
Saat menggunakan login buruh pelabuhan, buruh pelabuhan akan menyimpan server: pasangan kunci baik di gantungan kunci Anda atau file ~ / .docker / config.json
Jika menyimpan kunci di bawah
https://7272727.dkr.ecr.us-east-1.amazonaws.com
pencarian untuk kunci selama push akan gagal karena buruh pelabuhan akan mencari server bernama7272727.dkr.ecr.us-east-1.amazonaws.com
tidakhttps://7272727.dkr.ecr.us-east-1.amazonaws.com
.Gunakan perintah berikut untuk masuk:
Setelah Anda menjalankan perintah Anda akan mendapatkan
'Login Succeeded'
pesan dan kemudian Anda baiksetelah itu perintah push Anda akan berfungsi
sumber
Ada cara yang sangat sederhana untuk mendorong gambar buruh pelabuhan ke ECR: Amazon ECR Docker Credential Helper . Instal saja sesuai dengan panduan yang disediakan, perbarui
~/.docker/config.json
sebagai berikut:dan Anda akan dapat mendorong / menarik gambar Anda tanpa
docker login
.sumber
Saya mengalami masalah ini juga berjalan di OSX. Saya melihat respons Oliver Salzburg dan memeriksa ~ / .docker / config.json saya. Itu memiliki beberapa kredensial otorisasi di dalamnya dari berbagai akun AWS yang saya miliki. Saya menghapus file dan setelah menjalankan get-login lagi berhasil.
sumber
Pastikan Anda menggunakan wilayah yang benar
aws ecr get-login
, itu harus cocok dengan wilayah tempat repositori Anda dibuat.sumber
Masalah saya adalah memiliki beberapa kredensial AWS; default dan dev. Karena saya mencoba untuk menyebarkan ke dev ini bekerja:
sumber
FWIW, Debian 9, Docker versi 18.06.1-ce, build e68fc7a:
$(aws ecr get-login | sed 's| -e none | |g')
sumber
Jika Anda menggunakan banyak profil dan Anda harus masuk ke profil yang bukan default Anda, Anda harus masuk dengan perintah ini:
sumber
Perintah berikut bekerja untuk saya:
Lalu saya menjalankan perintah ini:
sumber
kami juga menghadapi masalah ini hari ini dan mencoba semua yang disebutkan dalam pos ini (kecuali menghasilkan kredensial AWS).
Kami akhirnya memecahkan masalah dengan hanya memutakhirkan Docker, lalu push bekerja.
Masalahnya ditemui dengan Docker 1.10.x dan diselesaikan dengan Docker 1.11.x.
Semoga ini membantu
sumber
Jika Anda mengisolasi Akun AWS untuk tujuan CI / CD dan memiliki satu repositori ECR yang dibagikan di antara beberapa Akun AWS, Anda mungkin perlu mengubah
~/.docker/config.json
secara manual.Katakanlah Anda memiliki pengaturan ini:
00000000000000
99999999999999
Jika Anda menelepon
aws ecr get-login --region us-west-2 | bash
dalam server CI Anda, buruh pelabuhan akan menghasilkan kredensial sementara di~/.docker/config.json
.Tetapi Anda ingin menunjuk ke akun ECR, jadi Anda perlu mengubah nama host.
Perhatikan situasi ini bergantung pada bagaimana Anda membentuk pengguna / kebijakan IAM untuk memungkinkan akses ECR.
sumber
Anda harus memastikan bahwa Anda telah masuk menggunakan kredensial yang benar, Lihat deskripsi kesalahan resmi dan periksa di sini
http://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html
Memperbaiki "tidak ada otentikasi dasar" dijelaskan dalam tautan
sumber
Perintah ini memberi saya perintah yang benar untuk masuk. Jika Anda tidak menggunakan "--tidak-termasuk-email", itu akan menimbulkan kesalahan lain. Output dari perintah di atas terlihat seperti ini buruh pelabuhan login -u AWS -p ********************** ****** sangat besar. Salin itu dan jalankan. Sekarang akan muncul "Login Berhasil". Sekarang Anda dapat mendorong gambar Anda ke ECR.
Pastikan aturan AMI Anda memiliki izin untuk pengguna yang Anda coba masuki.
sumber