अमेज़ॅन ईसीआर के लिए छवि को धक्का नहीं दे सकता - "कोई मूल विशेषाधिकार नहीं" के साथ विफल रहता है


173

मैं एक अमेज़ॅन ईसीआर रजिस्ट्री के लिए एक डॉक छवि को धक्का देने की कोशिश कर रहा हूं। मैं docker क्लाइंट Docker संस्करण 1.9.1 का उपयोग कर रहा हूं, बिल्ड a34a1d5। मैं aws ecr get-login --region us-east-1docker login क्रेडिट पाने के लिए उपयोग करता हूँ । फिर मैं उन क्रेडिट के साथ सफलतापूर्वक लॉगिन करता हूं:

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

लेकिन जब मैं अपनी छवि को आगे बढ़ाने की कोशिश करता हूं तो मुझे निम्नलिखित त्रुटि मिलती है:

$ 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

मुझे यकीन है कि aws उपयोगकर्ता सही अनुमति थी। मैंने यह भी सुनिश्चित किया कि रिपॉजिटरी ने उस उपयोगकर्ता को इसे पुश करने की अनुमति दी। बस यह सुनिश्चित करने के लिए कि सभी उपयोगकर्ताओं को पूर्ण पहुँच की अनुमति देने के लिए मैंने रजिस्ट्री सेट नहीं की है। कुछ भी "no basic auth credentials"त्रुटि नहीं बदलता है । मुझे नहीं पता कि सभी ट्रैफ़िक एन्क्रिप्ट किए जाने के बाद से इसे कैसे डीबग करना शुरू करना है।

अपडेट करें

इसलिए मेरे पास होमर सिम्पसन डी'ओएच का क्षण था जब मुझे अपनी समस्या का मूल कारण पता चला। मेरे पास कई AWS खातों तक पहुंच है। भले ही मैं aws configureउस खाते के लिए अपनी साख सेट करने के लिए उपयोग कर रहा था , जहां मैंने अपनी रिपॉजिटरी aws cli सेटअप की थी वास्तव में पर्यावरण चर AWS_ACCESS_KEY_IDऔर का उपयोग कर रहा था AWS_SECRET_ACCESS_KEY। इसलिए जब मैंने किया तो aws ecr get-loginयह गलत खाते के लिए एक लॉगिन लौटा रहा था । मैं यह नोट करने में विफल रहा कि जब तक मैं अभी प्रस्तावित प्रस्तावों में से कुछ को आज़माने के लिए खाता संख्या अलग नहीं हो गया था। जब मैं पर्यावरण चर निकालता हूं तो सब कुछ सही ढंग से काम करता है। मुझे लगता है कि कहानी का आदर्श वाक्य है यदि आप इस त्रुटि को मारते हैं, तो सुनिश्चित करें कि आप जिस रिपॉजिटरी में लॉग इन कर रहे हैं वह उस टैग से मेल खाता है जिसे आपने छवि पर लागू किया है।


10
आपको उस अपडेट को बोल्ड, रेखांकित और इटैलिकाइज़ करना चाहिए। मैं भी बस उस होमर सिम्पसन पल था। धन्यवाद!
माइक

इसे कम करने के लिए धन्यवाद! आपने मेरा दिन सचमुच बचा लिया!
सिमोन्सो

2
जब रिपॉजिटरी मौजूद नहीं होती है तो वही त्रुटि दी जाती है। जांचें कि आपने सही क्षेत्र में रेपो बनाया है या नहीं।
इलिया सिदोरेंको


ध्यान दें कि आप कई उपयोगकर्ता प्रोफ़ाइलों को संभालने के लिए अपने aws cli को सेट कर सकते हैं: docs.aws.amazon.com/cli/latest/userguide/…
पीटर बर्ग

जवाबों:


111

यदि आप $(aws ecr get-login --region us-east-1)इसे चलाते हैं तो यह सब आपके लिए किया जाएगा


17
तुम एक किंवदंती हो। AWS गाइड में चरण 2 को छोड़कर सभी शेल कमांड के साथ 5 चरण थे, जो केवल कहते हैं "पिछले चरण में लौटाए गए docker लॉगिन कमांड को चलाएं।" मुझे लगता है कि मेरे जैसे लोगों का एक पूरा ढेर सिर्फ शेल कमांड पर केंद्रित है और निर्देश को ठीक से नहीं पढ़ा है
Tien Dinh

टाइम मशीन - $ () में aws कमांड को लपेटने से लॉगिन सही ढंग से सफल क्यों होता है?
VtoCorleone

6
@VtoCorleone aws कमांड सिर्फ मानक उत्पादन के लिए एक docker कमांड प्रिंट करता है। यदि आप उस स्ट्रिंग को $ () में लपेटते हैं, तो इसे शेल द्वारा व्याख्या किया docker loginजाएगा और कमांड चलाया जाएगा।
ओटावियो मैसिडो

2
$ (aws ecr get-login --region us-west-2) अज्ञात आशुलिपि ध्वज: 'ई' इन-ई सी 'डॉक लॉगिन - हेल्प' देखें।
आशीष करपे

23
यदि आपको "अज्ञात शॉर्टहैंड ध्वज: 'e' मिल रहा है, तो आपको कमांड को इस तरह से -no-शामिल-ईमेल ध्वज के साथ चलाना होगा: $ (aws ecr get-login -region us-east-1 - नहीं-शामिल-ईमेल)
ट्रेंटन

57

मेरे मामले में यह विंडोज के लिए डॉकर के साथ एक बग था और विंडोज क्रेडेंशियल मैनेजर के लिए उनका समर्थन था।

अपनी खोलें ~/.docker/config.jsonऔर "credsStore": "wincred"प्रविष्टि को हटा दें ।

इससे क्रेडेंशियल्स को config.jsonसीधे लिखा जाएगा । आपको बाद में फिर से लॉग इन करना होगा।

आप इस बग को GitHub पर टिकट # 22910 और # 24968 के माध्यम से ट्रैक कर सकते हैं ।


धन्यवाद - विंडोज 10 पर काम किया। उस संपत्ति को कॉन्फ़िगरेशन से हटाने के बाद, और फिर से डॉक लॉगिन कमांड को चलाने के लिए, कॉन्फ़िगर फ़ाइल को क्रेडेंशियल्स के साथ अपडेट किया गया था, और काम किया गया पुश।
कैमरून

मैं कॉन्फिग फाइल नहीं ढूंढ पा रहा हूं। क्या आप मुझे config.json फ़ाइल का स्थान सुझा सकते हैं?
रामाशंकर त्रिपाठी 12

@RamashankerTripathi स्थान उत्तर में है। मुझे यकीन नहीं है कि मैं कैसे स्पष्ट हो सकता हूं।
डेर होकस्टाप्लर

@OliverSalzburg उत्तर के लिए धन्यवाद। वास्तव में मेरे डॉकर इंस्टॉलेशन डायरेक्टरी में config.json फाइल नहीं है।
रामाशंकर त्रिपाठी 14

@RamashankerTripathi का ~/.dockerअर्थ .dockerहै आपके घर की निर्देशिका में। कोशिश%HOMEDRIVE%%HOMEPATH%\.docker
14

50

आप प्रोफ़ाइल का उपयोग करते हैं, तो पारित करने के लिए मत भूलना --profile=XXXके लिए aws ecr get-login


27

मेरे पास भी यह मुद्दा था। मेरे साथ जो हुआ था, मैं कमांड चलाने के लिए भूल गया था जो मुझे दौड़ने के बाद वापस कर दिया गया था

aws ecr get-login --region ap-southeast-2

इस कमांड ने एक बड़ा ब्लॉब लौटाया, जिसमें docker loginकमांड भी शामिल है ! मुझे एहसास नहीं हुआ। इसे कुछ इस तरह लौटाना चाहिए:

docker login -u AWS -p <your_token_which_is_massive> -e none <your_aws_url>

इस कमांड को कॉपी और पेस्ट करें और फिर अपना डॉक पुश कमांड चलाएं जो कुछ इस तरह दिखता है:

docker push 8888888.blah.blah.ap-southwest-1.amazonaws.com/dockerfilename

1
मुझे नहीं पता था कि उस बूँद की प्रतिक्रिया क्या थी इसलिए मैंने इसे अनदेखा कर दिया। haha। इस पर ध्यान दिलाने के लिए धन्यवाद!
duyn9uyen

14

यह अनुमतियों को खोलने के बिना भी काम करना चाहिए था। प्रलेखन देखें: निजी रजिस्ट्री प्रमाणीकरण

[संपादित करें: वास्तव में, मुझे दूसरा परीक्षण करते समय भी समस्याएँ थीं। डॉकटर को AWS ECR निजी रेपो में विकृत JSON के साथ असफल देखें )।

फिर भी मुझे वही समस्या थी; मुझे पता नहीं क्यों, लेकिन मैंने गेट -ऑथोराइज़ेशन-टोकन के लिए डॉक्स में वर्णित अधिक लंबी घुमावदार हवा तंत्र का सफलतापूर्वक उपयोग किया

AWS सीएलआई और डॉकर संस्करण:

$ aws --version
aws-cli/1.9.17 Python/2.7.6 Linux/3.16.0-38-generic botocore/1.3.17
$ docker --version
Docker version 1.9.1, build a34a1d5

ऑर्टिकल टोकन प्राप्त करें ('docker password')।

aws ecr get-authorization-token --region us-east-1 --output text \
    --query authorizationData[].authorizationToken | base64 -d | cut -d: -f2

नोट: मेरा ~ / .aws / config एक अलग डिफ़ॉल्ट क्षेत्र निर्दिष्ट करता है, इसलिए मुझे स्पष्ट रूप से सेट करने की आवश्यकता है --region us-east-1

अंतःक्रियात्मक रूप से लॉग इन करें ( ############अपनी AWS खाता आईडी में परिवर्तन करें):

docker login -u AWS https://############.dkr.ecr.us-east-1.amazonaws.com/
password: <paste the very long password from above>
email: <I left this blank>

एक छवि पुश करें (यह मानते हुए कि आपने डॉक छवि बनाई है test):

docker tag test:latest ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
docker push ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
The push refers to a repository [910732017890.dkr.ecr.us-east-1.amazonaws.com/test] (len: 1)
d5122f58a2e1: Pushed 
7bddbca3b908: Pushed 
latest: digest: sha256:bc0b521fd398bd1a2ef58a289dcb910334608723fd570e7bddb36eacd0060363 size: 4378

आपने बहुत लंबा पासवर्ड कैसे पेस्ट किया ??? मेरा कई लाइनों है। मैं विंडोज डॉकर क्विकार्टार्ट टर्मिनल का उपयोग कर रहा हूं, जिसमें अच्छी कॉपी / पेस्ट क्षमता नहीं है, या शायद मैं अभी इसका पता नहीं लगा सकता।
डेविड

किसी और को आश्चर्यचकित करने के लिए, मुझे बस व्हाट्सएप सहित पूरी चीज़ को चिह्नित करना और कॉपी करना होगा, और फिर उस नोटपैड में पेस्ट करना होगा। वहां से, मैं लाइन ब्रेक को हटा देता हूं, और सब कुछ रिकॉपी करता हूं , और उसके बाद ही मैं टर्मिनल कमांड लाइन में पेस्ट कर सकता हूं। वह काम किया।
डेविड

यदि आप PowerShell का उपयोग कर रहे हैं, तो गुण> विकल्प टैब पर जाएं और "लाइन रैपिंग चयन सक्षम करें" चुनें। इस तरह, आप नोटपैड में मैन्युअल रूप से कॉपी किए बिना, नई लाइनों को हटाने आदि के बिना लिपटे लाइनों का चयन करने के लिए क्लिक और ड्रैग कर सकते हैं
एड्रशर

मैं लगभग 10 वर्षों में एक विंडोज़ मशीन छुआ है, लेकिन आप हमेशा पाइप stdout एक फाइल करने के लिए कर सकते हैं: aws ecr get-authorization-token > config.jsonऔर फिर इसे अपने पसंदीदा पाठ संपादक में खोल कॉपी और होगा पर चिपकाने के लिए
pcting

13

इसके साथ प्रयास करें:

eval $(aws ecr get-login --no-include-email | sed 's|https://||')

धक्का देने से पहले।


मुझे यह मिलाno basic auth credentials Invalid IPv6 URL
थान गुयेन वान

12

अपडेट करें

चूंकि एडब्ल्यूएस सीएलआई संस्करण 2 - aws ecr get-loginपदावनत है और सही विधि है aws ecr get-login-password

इसलिए सही और अद्यतन उत्तर निम्न है: docker login -u AWS -p $(aws ecr get-login-password --region us-east-1) xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com


मैंunknown flag: --region
kittu

11

अगर यह किसी की मदद करता है ...

मेरी समस्या यह थी कि मुझे --profileक्रेडेंशियल फ़ाइल से उचित प्रोफ़ाइल को प्रमाणित करने के लिए विकल्प का उपयोग करना था ।

इसके बाद, मैंने --region [region_name]कमांड को ommitted किया था, जिसने "कोई मूल विशेषाधिकार नहीं" त्रुटि दी थी।

मेरे लिए समाधान इससे मेरी आज्ञा बदल रहा था:

aws ecr get-login

इसके लिए:

aws --profile [profile_name] ecr get-login --region [region_name]

उदाहरण:

aws --profile foo ecr get-login --region us-east-1

आशा है कि किसी की मदद करता है!


1
तुमने मुझे बचाया! मैं इस तरह से अपने aws प्रोफ़ाइल का उपयोग कर रहा था, AWS_PROFILE=myprofile aws ecr get-loginऔर यह काम नहीं कर रहा था, लेकिन --profileतर्क के साथ aws प्रोफ़ाइल शुरू करने से चाल बनती है!
Colo Ghidini

8

विंडोज पर wincred क्रेडेंशियल मैनेजर में एक ज्ञात बग है। उत्पन्न लॉगिन कमांड से 'https: //' को हटाने से यह हल हो जाता है।

docker login -u AWS -p <password> <aws_account_id>.dkr.ecr.<region>.amazonaws.com

के बजाय

docker login -u AWS -p <password> https://<aws_account_id>.dkr.ecr.<region>.amazonaws.com

समस्या निवारण पृष्ठ भी देखें ।


8

मैंने उसी मुद्दे का अनुभव किया।

नई AWS क्रेडेंशियल (पहुंच कुंजी) बनाना और नए क्रेडेंशियल्स के साथ AWS CLI को पुन: कॉन्फ़िगर करने से समस्या हल हो गई।

इससे पहले, aws ecr get-login --region us-east-1अवैध EC रजिस्ट्री URL के साथ डॉकटर लॉगिन कमांड जनरेट किया गया था।


मेरे साथ भी ऐसा ही हुआ। धन्यवाद!
ग्रीनेके

यह मेरी समस्या थी। मैं एक अलग AWS सीएलआई क्रेडेंशियल्स ~ / .aws / क्रेडेंशियल्स में संग्रहीत aws की तुलना में मैं प्रबंधित कर रहा था। नए क्रेडेंशियल्स और सेटिंग को फिर से बनाया गया।
मार्टिन एलेस्टेन 16


5

मेरे पास एक अलग कारण के साथ यह मुद्दा था: मुझे अपने एडब्ल्यूएस खाते (एक ग्राहक की ईसीआर रजिस्ट्री) के साथ जुड़ी हुई रजिस्ट्री पर धकेलने की आवश्यकता नहीं थी। क्लाइंट ने मुझे arn:aws:iam::{AWS ACCT #}:user/{Username}प्रिंसिपल के रूप में अपनी IAM आईडी (जैसे, ) जोड़कर रजिस्ट्री के लिए अनुमतियाँ टैब के तहत पहुंच प्रदान की थी । मैंने सामान्य चरणों के साथ लॉगिन करने की कोशिश की:

$(aws ecr get-login --region us-west-2 --profile profilename)
docker push {Client AWS ACCT #}.dkr.ecr.us-west-1.amazonaws.com/imagename:latest

जिसके परिणामस्वरूप निश्चित रूप से no basic auth credentialsजैसा कि यह पता चला है , आपके लॉगिन से जुड़ी रजिस्ट्री के लिएaws ecr get-login ईसीआर में आपको लॉग इन करता है , जो रेट्रोस्पेक्ट में समझ में आता है। समाधान यह बताना है कि आप aws ecr get-loginकिस रजिस्ट्री (रजिस्ट्री) में लॉग इन करना चाहते हैं।

$(aws ecr get-login --region us-west-2 --profile profilename --registry-ids {Client AWS ACCT #})

उसके बाद, docker pushठीक काम करता है।


यह समझ में आता है। लेकिन आपको क्या करना चाहिए --profile? मेरे पास एक व्यक्तिगत खाता है लेकिन मैं एक कंपनी खाते में धकेलने की कोशिश कर रहा हूं। दूसरे शब्दों में, मुझे कहाँ मिलता हैprofilename
सिप्रियन टोमोयागै

1
@ CiprianTomoiagă आपको केवल उसी में शामिल होना चाहिए यदि आप नामांकित प्रोफाइल का उपयोग कर रहे हैं। यहां देखें docs.aws.amazon.com/cli/latest/userguide/…
सर्जियो

5
  1. सुनिश्चित करें कि आपने पहले ECR रजिस्ट्री बनाई है।
    फिर ईसीआर पुश कमांड निर्देशों के अनुसार, निम्नलिखित कमांडों को काटें और पेस्ट करें

  2. eval $(aws ecr get-login --region us-east-1)
    यदि आप एक से अधिक AWS खातों का उपयोग करते हैं, तो docker लॉगिन कमांड (Mac / Linux पर कट-एंड-पेस्ट को हटाता है ) को जोड़ दें - प्रॉफाइल करें
    eval $(aws ecr get-login --region us-east-1 --profile your-profile)
  3. docker build -t image-name .
  4. docker tag image-name:latest ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest
  5. docker push ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest

त्रुटि के मामले में, सुनिश्चित करें कि आप सभी आदेशों को फिर से चलाते हैं! आपके द्वारा उपयोग aws ecr get-loginकिए जा रहे क्रेडेंशियल अस्थायी हैं और समाप्त हो जाएंगे।


मुझे यह पता नहीं है कि मुझे क्या करना है your-profile?
एंडी

यदि आप डिफ़ॉल्ट प्रोफ़ाइल का उपयोग कर रहे हैं तो आप इसे छोड़ सकते हैं
जेसन

मैं यह पता लगाने की कोशिश कर रहा था कि डिफ़ॉल्ट प्रोफ़ाइल का उपयोग कैसे नहीं किया जाए। मैंने यह पता लगा लिया, हालांकि, अतिरिक्त प्रोफ़ाइल को फ़ाइलों ~/.aws/configऔर ~/.aws/credentialsफ़ाइलों में दर्ज किया जा सकता है ।
एंडी

5

मेरे मामले में, दौड़ने के बाद aws ecr get-login --no-include-email --region *****, मैंने सिर्फ उस कमांड के आउटपुट को कॉपी किया था जो फॉर्म का है docker login -u *** -p ************, और आप इसे प्रॉम्प्ट में पेस्ट करते हैं। धक्कामुक्की आगे बढ़ गई।


4

AWS दस्तावेज़ आपको निम्नलिखित कमांड निष्पादित करने के लिए कहते हैं (एपी-दक्षिण -२ क्षेत्र के लिए)

aws ecr get-login --region ap-southeast-2

जब मैं इस मुद्दे पर टकराया, तो यह उस डॉक्स के आधार पर मेरे लिए स्पष्ट नहीं था कि आपको इस कमांड के परिणाम को टर्मिनल में दर्ज करने और इसे निष्पादित करने की आवश्यकता है।

फिक्स जो मेरे लिए काम करता था, वह परिणाम को क्लिपबोर्ड पर कॉपी करना था

aws ecr get-login --region ap-southeast-2 | pbcopy

परिणाम को कमांड लाइन में पेस्ट करें और इसे निष्पादित करें


4

इस कमांड को चलाने के बाद:

(aws ecr get-login --no-include-email --region us-west-2)

बस आउटपुट से docker लॉगिन कमांड चलाएँ

docker login -u AWS -p epJ....

वह तरीका है जो डॉकटर ईसीआर में प्रवेश करता है


3

यह त्रुटि आम तौर पर फेंक दी जाती है अगर एक्स्ट्रा लॉगिन विफल हो गया हो। मैं विंडोज़ सिस्टम का उपयोग कर रहा हूं और मैंने पहले ecr में लॉगिन करने के लिए एडमिनिस्ट्रेटर मोड में "Powershell" का उपयोग किया है।

Invoke-Expression $(aws ecr get-login --no-include-email)

यह "लॉगिन सफल हुआ" आउटपुट होना चाहिए।


धन्यवाद! इसने मदद क्यों की? मैं पहले से ही saml2aws का उपयोग करने में लॉग इन कर रहा था।
सहायक नदी

2

मुझे उसी मुद्दे का सामना करना पड़ा और मैंने जो गलती की वह गलत रेपो पथ का उपयोग कर रहा था

उदाहरण के लिए: docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest

उपरोक्त पथ में यह वह जगह है जहाँ मैंने गलती की है: इसके "dkr.ecr.us-east-1.amazonaws.com"बजाय "west"। मैं उपयोग कर रहा था " east"। एक बार जब मैंने अपनी गलती को सुधार लिया, तो मैं छवि को सफलतापूर्वक धक्का देने में सक्षम था।


2

Aws-cli द्वारा दिया गया docker कमांड बहुत कम है ...

डॉक लॉगिन का उपयोग करते समय, डॉकटर एक सर्वर को बचाएगा: कुंजी जोड़ी या तो आपके किचेन या ~ / .docker / config .json फ़ाइल में।

अगर यह https://7272727.dkr.ecr.us-east-1.amazonaws.comपुश के दौरान कुंजी के लिए लुकअप के तहत कुंजी को बचाता है तो विफल हो जाएगा क्योंकि docker सर्वर की तलाश करेगा जिसका नाम 7272727.dkr.ecr.us-east-1.amazonaws.comनहीं है https://7272727.dkr.ecr.us-east-1.amazonaws.com

लॉगिन करने के लिए निम्न कमांड का उपयोग करें:

eval $(aws ecr get-login --no-include-email --region us-east-1 --profile yourprofile | sed 's|https://||')

एक बार जब आप कमांड चलाते 'Login Succeeded'हैं तो आपको संदेश मिल जाएगा और उसके बाद आप अच्छे हैं
कि आपके पुश कमांड को काम करना चाहिए


2

ECR के लिए docker की छवियों को धकेलने का एक बहुत ही सरल तरीका है: Amazon ECR Docker क्रेडेंशियल हेल्पर । बस इसे दिए गए मार्गदर्शिका के अनुसार स्थापित करें, अपने ~/.docker/config.jsonनिम्नलिखित को अपडेट करें :

{
    "credsStore": "ecr-login"
}

और आप अपनी छवियों को बिना धक्का दिए / खींच पाएंगे docker login


इस लेख के निर्देशों का पालन करने के बाद मुझे वही त्रुटि मिली।
राईचस

1

मैं इस मुद्दे पर भाग गया साथ ही साथ OSX पर चल रहा था। मैंने ओलिवर साल्ज़बर्ग की प्रतिक्रिया देखी और मेरी ~ / .docker / config.json की जाँच की। मेरे पास विभिन्न AWS खातों से इसके अंदर कई प्राधिकरण क्रेडेंशियल थे। मैंने फाइल को डिलीट कर दिया और गेट-लॉगिन को चलाने के बाद फिर से काम किया।


1

सुनिश्चित करें कि आप सही क्षेत्र का उपयोग करते हैं aws ecr get-login, यह उस क्षेत्र से मेल खाना चाहिए जिसमें आपका भंडार बनाया गया है।


1

मेरे मुद्दे में कई AWS क्रेडेंशियल थे; डिफ़ॉल्ट और देव। जब से मैं यह काम करने के लिए तैनात करने की कोशिश कर रहा था:

$(aws ecr get-login --no-include-email --region eu-west-1 --profile dev | sed 's|https://||')

1

एफडब्ल्यूआईडब्ल्यू, डेबियन 9, डॉकर संस्करण 18.06.1-CE, बिल्ड e68fc7a:

$(aws ecr get-login | sed 's| -e none | |g')


1

यदि आप कई प्रोफ़ाइलों का उपयोग करते हैं और आपको ऐसे प्रोफ़ाइल में लॉगिन करने की आवश्यकता है जो आपका डिफ़ॉल्ट नहीं है, तो आपको इस आदेश के साथ लॉगिन करने की आवश्यकता है:

$(AWS_PROFILE=<YOUR PROFILE> aws ecr get-login --no-include-email --region eu-west-1)

1

मेरे लिए निम्नलिखित कमांड काम करती है:

sudo $(aws ecr get-login --region us-east-1 --no-include-email)

और फिर मैं ये कमांड चलाता हूं:

sudo docker tag e9ae3c220b23(image_id) aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app

sudo docker push aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app

0

आज हम इस मुद्दे का सामना भी कर रहे हैं और इस पोस्ट में उल्लिखित सब कुछ करने की कोशिश की (AWS क्रेडेंशियल्स को छोड़कर)।

हमने आखिरकार डॉकटर को अपग्रेड करके समस्या को हल किया, फिर पुश ने काम किया।

इस समस्या का सामना डॉकर 1.10.x के साथ किया गया था और इसे डॉकर 1.11.x के साथ हल किया गया था।

उम्मीद है की यह मदद करेगा


0

यदि आप CI / CD उद्देश्य के लिए AWS खातों को अलग कर रहे हैं और एक ECR रिपॉजिटरी को कई AWS खातों में साझा किया है, तो आपको ~/.docker/config.jsonमैन्युअल रूप से बदलने की आवश्यकता हो सकती है ।

मान लें कि आपके पास ये सेटअप हैं:

  1. ECR AWS खाता आईडी के स्वामित्व में है 00000000000000
  2. CI सर्वर AWS खाता आईडी के स्वामित्व में है 99999999999999

यदि आप aws ecr get-login --region us-west-2 | bashअपने CI सर्वर के भीतर कॉल करते हैं, तो docker अस्थायी क्रेडेंशियल जनरेट करेगा ~/.docker/config.json

{
  "auths": {
    "https://99999999999999.dkr.ecr.us-west-2.amazonaws.com": {
      "auth": "long-token.."
    }
  }
}

लेकिन आप ईसीआर के खाते को इंगित करना चाहते हैं, इसलिए आपको होस्टनाम बदलने की आवश्यकता है।

{
  "auths": {
    "https://00000000000000.dkr.ecr.us-west-2.amazonaws.com": {
      "auth": "long-token.."
    }
  }
}

ध्यान दें कि यह स्थिति निर्भर करती है कि आप ईसीआर एक्सेस की अनुमति देने के लिए IAM उपयोगकर्ता / नीति कैसे बनाते हैं।


0

आपको यह सुनिश्चित करना होगा कि आपने सही क्रेडेंशियल्स का उपयोग करके लॉग इन किया है, यहां ऑफिकल एरर विवरण और चेक देखें

http://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html

लिंक में "नो बेसिक ऑथेंटिकेशन" फिक्स करना वर्णित है


0
aws ecr get-login --region us-west-1 --no-include-email

यह कमांड मुझे लॉगिन करने की सही कमांड देता है। यदि आप "-no-शामिल-ईमेल" का उपयोग नहीं करते हैं, तो यह एक और त्रुटि फेंक देगा। उपरोक्त कमांड का आउटपुट इस डॉकटर लॉगिन के जैसा दिखता है -u AWS -p ************************ बहुत बड़ा ******। उसे कॉपी करें और निष्पादित करें। अब यह "लॉगिन सफल" दिखाएगा। अब आप अपनी छवि को ईसीआर में धकेल सकते हैं।

सुनिश्चित करें कि आपके AMI नियम में उस उपयोगकर्ता की अनुमति है जिसे आपने लॉगिन करने का प्रयास किया था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.