ไม่สามารถส่งภาพไปที่ Amazon ECR - ล้มเหลวด้วย“ ไม่มีข้อมูลรับรองสิทธิ์ขั้นพื้นฐาน”


173

ฉันกำลังพยายามที่จะผลักดันภาพนักเทียบท่าที่รีจิสทรี Amazon ECR ฉันใช้นักเทียบท่าไคลเอนต์นักเทียบท่าเวอร์ชัน 1.9.1 a34a1d5แล้ว ฉันใช้aws ecr get-login --region us-east-1เพื่อรับเครดิตเข้าสู่ระบบนักเทียบท่า จากนั้นฉันเข้าสู่ระบบด้วยเครดิตเหล่านี้สำเร็จแล้ว:

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"ข้อผิดพลาด ฉันไม่ทราบวิธีเริ่มแก้ไขข้อบกพร่องนี้เนื่องจากการรับส่งข้อมูลทั้งหมดได้รับการเข้ารหัส

UPDATE

ดังนั้นฉันจึงมีช่วงเวลาหนึ่งของโฮเมอร์ซิมป์สันดิโอเมื่อฉันตระหนักถึงสาเหตุของปัญหาของฉัน ฉันมีสิทธิ์เข้าถึงบัญชี AWS หลายบัญชี แม้ว่าฉันถูกใช้aws configureในการตั้งค่าข้อมูลประจำตัวของฉันสำหรับบัญชีที่ฉันได้ตั้งค่าของฉันเก็บ AWS CLI เป็นจริงโดยใช้ตัวแปรสภาพแวดล้อมและAWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEYดังนั้นเมื่อฉันทำaws ecr get-loginมันก็กลับเข้าสู่ระบบสำหรับบัญชีที่ไม่ถูกต้อง ฉันไม่สังเกตเห็นว่าหมายเลขบัญชีนั้นแตกต่างกันไปจนกระทั่งฉันเพิ่งกลับไปลองคำตอบที่เสนอ เมื่อฉันลบตัวแปรสภาพแวดล้อมทุกอย่างทำงานได้อย่างถูกต้อง ฉันเดาว่าคำขวัญของเรื่องนี้คือถ้าคุณพบข้อผิดพลาดนี้ตรวจสอบให้แน่ใจว่าพื้นที่เก็บข้อมูลที่คุณกำลังเข้าสู่ระบบตรงกับแท็กที่คุณใช้กับภาพ


10
คุณควรทำให้การอัปเดตนั้นเป็นตัวหนาขีดเส้นใต้และตัวเอียง ฉันเพิ่งมีช่วงเวลาที่โฮเมอร์ซิมป์สัน ขอบคุณ!
Mike

ขอขอบคุณที่ลดขนาด! คุณบันทึกวันของฉันอย่างแท้จริง!
simonso

2
ข้อผิดพลาดเดียวกันจะได้รับเมื่อไม่มีที่เก็บ ตรวจสอบว่าคุณสร้าง repo ในภูมิภาคที่ถูกต้องหรือไม่
Ilia Sidorenko


โปรดทราบว่าคุณสามารถตั้งค่า aws cli ของคุณเพื่อจัดการโปรไฟล์ผู้ใช้หลายโปรไฟล์: docs.aws.amazon.com/cli/latest/userguide/…
Peter Berg

คำตอบ:


111

หากคุณเรียกใช้$(aws ecr get-login --region us-east-1)มันจะทำทุกอย่างให้คุณ


17
คุณเป็นตำนาน คู่มือ AWS มีทั้งหมด 5 ขั้นตอนพร้อมกับคำสั่งเชลล์ยกเว้นขั้นตอนที่ 2 ซึ่งพูดว่า "รันคำสั่งการเข้าสู่ระบบนักเทียบท่าที่กลับมาในขั้นตอนก่อนหน้า" ผมคิดว่ากองทั้งของคนที่ชอบตัวเองเพียงมุ่งเน้นไปที่คำสั่งของเชลล์และไม่ได้อ่านคำแนะนำอย่างถูกต้อง
เทียน Dinh

Time Machine - ทำไมการห่อคำสั่ง aws ใน $ () ทำให้การล็อกอินสำเร็จอย่างถูกต้อง?
VtoCorleone

6
@VtoCorleone เนื่องจากคำสั่ง aws เพียงพิมพ์คำสั่ง docker ไปยังเอาต์พุตมาตรฐาน หากคุณตัดสตริงนั้นเป็น $ () สตริงนั้นจะถูกตีความโดยเชลล์และdocker loginคำสั่งจะถูกรัน
Otavio Macedo

2
$ (aws ecr get-login - region us-west-2) ไม่ทราบสถานะการจดชวเลข: 'e' in -e ดู 'ล็อกอินนักเทียบท่า --help'
Ashish Karpe

23
หากคุณได้รับ "ไม่ทราบสถานะการจดชวเลข: 'e'" คุณจะต้องเรียกใช้คำสั่งด้วย --no-include-email flag ดังนี้: $ (aws ecr get-login - region us-east-1 - ไม่รวมอีเมล)
เทรนตัน

57

ในกรณีของฉันนี่เป็นข้อผิดพลาดของ Docker for Windows และการสนับสนุน Windows Credential Manager

เปิดของคุณ~/.docker/config.jsonและลบ"credsStore": "wincred"รายการ

นี่จะทำให้ข้อมูลประจำตัวถูกเขียนไปยังconfig.jsonโดยตรง คุณจะต้องเข้าสู่ระบบอีกครั้งในภายหลัง

คุณสามารถติดตามข้อผิดพลาดนี้ผ่านบัตร# 22910และ# 24968บน GitHub


ขอบคุณ - ทำงานบน Windows 10 หลังจากลบคุณสมบัตินั้นออกจากการกำหนดค่าและเรียกใช้คำสั่งนักเทียบท่าเข้าสู่ระบบอีกครั้งไฟล์กำหนดค่าจะถูกอัปเดตด้วยข้อมูลประจำตัวและกดทำงาน
คาเมรอน

ฉันหาไฟล์ปรับแต่งไม่เจอ คุณช่วยแนะนำตำแหน่งของไฟล์ config.json ให้ฉันได้ไหม
Ramashanker Tripathi

@ RamashankerTripathi สถานที่ตั้งอยู่ในคำตอบ ฉันไม่แน่ใจว่าฉันจะชัดเจนได้อย่างไร
Der Hochstapler

@OliverSalzburg ขอบคุณสำหรับการตอบกลับ จริง ๆ แล้วไดเรกทอรีการติดตั้ง Docker ของฉันไม่มีไฟล์ config.json
Ramashanker Tripathi

@RamashankerTripathi ~/.dockerหมายถึง.dockerในไดเรกทอรีบ้านของคุณ ลอง%HOMEDRIVE%%HOMEPATH%\.docker
Der Hochstapler


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
ฉันไม่รู้ว่าการตอบสนองของหยดนั้นคืออะไรฉันก็เลยไม่สนใจมัน ฮ่าฮ่า ขอบคุณที่ชี้นำสิ่งนี้!
duyn9uyen

14

สิ่งนี้น่าจะใช้ได้แม้ไม่มีการเปิดการอนุญาต ดูเอกสาร: รับรองความถูกต้อง Registry เอกชน

[แก้ไข: จริง ๆ แล้วฉันมีปัญหาสิทธิ์เช่นกันเมื่อทำการทดสอบครั้งที่สอง ดูDocker push to repo ส่วนตัว AWS ECR ที่ล้มเหลวด้วย JSON ที่ผิดรูปแบบ )

อย่างไรก็ตามฉันมีปัญหาเดียวกัน ฉันไม่รู้ว่าทำไม แต่ฉันใช้กลไกการรับรองความถูกต้องที่ยืดยาวซึ่งอธิบายไว้ในเอกสารเพื่อให้ได้รับอนุญาต - โทเค็นสำเร็จแล้ว

รุ่น AWS CLI และ Docker:

$ 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

รับโทเค็นการรับรองความถูกต้อง ('รหัสผ่านนักเทียบท่า')

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

หมายเหตุ: My ~ / .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

คุณวางรหัสผ่านที่ยาวมากได้อย่างไร ??? ฉันเป็นหลายบรรทัด ฉันใช้ Windows Docker Quickstart Terminal ซึ่งดูเหมือนจะไม่มีความสามารถในการคัดลอก / วางที่ดีหรือบางทีฉันก็ไม่สามารถเข้าใจได้
David

สำหรับผู้อื่นที่สงสัยฉันต้องทำเครื่องหมายและคัดลอกทุกสิ่งรวมถึงช่องว่างแล้ววางลงในแผ่นจดบันทึก จากที่นั่นฉันลบตัวแบ่งบรรทัดและจัดเรียงใหม่ทุกอย่างและจากนั้นฉันสามารถวางลงในบรรทัดคำสั่งเทอร์มินัลได้ ที่ได้ผล
David

หากคุณใช้ PowerShell ให้ไปที่คุณสมบัติ> แท็บตัวเลือกแล้วเลือก "เปิดใช้งานการเลือกการตัดบรรทัด" ด้วยวิธีนี้คุณสามารถคลิกและลากเพื่อเลือกเส้นที่ถูกห่อโดยไม่ต้องคัดลอกด้วยตนเองลงใน Notepad ลบบรรทัดใหม่ ฯลฯ
adarshr

ฉันไม่ได้แตะเครื่อง windows ในรอบเกือบ 10 ปี แต่คุณสามารถไปที่ไฟล์ stdout ได้เสมอ: aws ecr get-authorization-token > config.jsonจากนั้นเปิดมันใน text editor ที่คุณชื่นชอบเพื่อคัดลอกและวางตามต้องการ
pcting

13

ลองด้วย:

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

ก่อนที่จะผลักดัน


ฉันได้สิ่งนี้no basic auth credentials Invalid IPv6 URL
Thanh Nguyen Van

12

ปรับปรุง

ตั้งแต่ AWS CLI รุ่นที่ 2 - จะเลิกและวิธีการที่ถูกต้องคือaws ecr get-loginaws 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
กิตติ

11

ถ้ามันช่วยทุกคน ...

ปัญหาของฉันคือฉันต้องใช้--profileตัวเลือกเพื่อรับรองความถูกต้องกับโปรไฟล์ที่เหมาะสมจากไฟล์ข้อมูลรับรอง

ต่อไปฉันได้ลบ--region [region_name]คำสั่งซึ่งทำให้เกิดข้อผิดพลาด "ไม่มีการรับรองความถูกต้องเบื้องต้น"

ทางออกสำหรับฉันคือการเปลี่ยนคำสั่งของฉันจากนี้:

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และมันใช้งานไม่ได้ แต่การแนะนำโปรไฟล์ aws พร้อม--profileอาร์กิวเมนต์ทำให้เคล็ดลับ!
Colo Ghidini

8

มีข้อบกพร่องที่รู้จักในตัวจัดการข้อมูลรับรอง wincred บน Windows การลบ '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คำสั่งล็อกอินของนักเทียบท่าก่อนหน้านี้สร้างขึ้นพร้อม URL รีจิสตรี EC ที่ไม่ถูกต้อง


เกิดขึ้นกับฉันเหมือนกัน ขอบคุณ!
Greendrake

นี่เป็นปัญหาของฉัน ฉันมีหนังสือรับรอง AWS CLI ที่แตกต่างกันซึ่งเก็บอยู่ใน ~ / .aws / หนังสือรับรองมากกว่า aws ที่ฉันจัดการอยู่ สร้างข้อมูลประจำตัวใหม่และการตั้งค่าที่ใช้งานได้
Martin Algesten


5

ฉันมีปัญหานี้ด้วยสาเหตุที่แตกต่าง: ฉันต้องผลักดันรีจิสทรีที่ไม่เกี่ยวข้องกับบัญชี AWS ของฉัน (รีจิสทรี ECR ของลูกค้า) ลูกค้าให้สิทธิ์การเข้าถึงแก่ฉันภายใต้แท็บการอนุญาตสำหรับรีจิสทรีโดยเพิ่มรหัส IAM ของฉัน (เช่นarn:aws:iam::{AWS ACCT #}:user/{Username}) เป็นตัวการ ฉันพยายามลงชื่อเข้าใช้ด้วยขั้นตอนปกติ:

$(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คุณเข้าสู่ ECR สำหรับรีจิสทรีที่เกี่ยวข้องกับการเข้าสู่ระบบของคุณซึ่งทำให้รู้สึกย้อนหลัง วิธีแก้ไขคือแจ้งให้ทราบว่าaws ecr get-loginคุณต้องการลงชื่อเข้าใช้รีจิสทรีใด

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

หลังจากนั้นdocker pushทำงานได้ดี


มันสมเหตุสมผลแล้ว แต่สิ่งที่คุณควรผ่านใน--profile? ฉันมีบัญชีส่วนตัว แต่ฉันพยายามที่จะผลักดันไปยังบัญชี บริษัท ในคำอื่น ๆ ที่ฉันจะหาprofilename
Ciprian Tomoiagă

1
@ CiprianTomoiagăคุณควรรวมไว้หากคุณใช้โปรไฟล์ที่มีชื่อ ดูที่นี่docs.aws.amazon.com/cli/latest/userguide/…
Sergio

5
  1. ตรวจสอบให้แน่ใจว่าคุณได้สร้างรีจิสตรี ECR ก่อน
    จากนั้นตามคำแนะนำของคำสั่ง ECR Push ให้ตัดและวางคำสั่งต่อไปนี้
  2. ดำเนินการคำสั่งนักเทียบท่าเข้าสู่ระบบ (eval บน Mac / Linux ข้ามการตัดและวาง)
    eval $(aws ecr get-login --region us-east-1)
    เพิ่ม - โปรไฟล์ถ้าคุณใช้บัญชี AWS หลายบัญชี
    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ที่ไหน
Andy

คุณสามารถปล่อยทิ้งไว้หากคุณใช้โปรไฟล์เริ่มต้น
Jason

ฉันพยายามหาวิธีใช้โปรไฟล์เริ่มต้น ฉันคิดออกว่าโปรไฟล์เพิ่มเติมสามารถป้อนใน~/.aws/configและ~/.aws/credentialsไฟล์
แอนดี้

5

ในกรณีของฉันหลังจากทำงานaws ecr get-login --no-include-email --region *****ฉันเพิ่งคัดลอกผลลัพธ์ของคำสั่งนั้นด้วยเป็นของแบบฟอร์มdocker login -u *** -p ************และคุณวางในพรอมต์ การผลักไปข้างหน้า


4

เอกสาร AWS บอกให้คุณดำเนินการคำสั่งต่อไปนี้ (สำหรับภูมิภาค ap-southeast-2)

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 login -u AWS -p epJ....

เป็นวิธีที่นักเทียบท่าเข้าสู่ระบบ ECR


3

ข้อผิดพลาดนี้มักจะเกิดขึ้นหากการเข้าสู่ระบบ ecr ล้มเหลว ฉันใช้ระบบ windows และฉันใช้ "Powershell" ในโหมดผู้ดูแลระบบเพื่อเข้าสู่ระบบ ecr ก่อน

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 / config.json

ถ้ามันจะช่วยประหยัดที่สำคัญภายใต้https://7272727.dkr.ecr.us-east-1.amazonaws.comการค้นหาสำหรับคีย์ในระหว่างการผลักดันจะล้มเหลวเนื่องจากนักเทียบท่าจะมองหาเซิร์ฟเวอร์ที่มีชื่อไม่ได้7272727.dkr.ecr.us-east-1.amazonaws.comhttps://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'ข้อความจากนั้นคุณก็จะสามารถใช้
คำสั่ง push ได้


2

: มีวิธีที่ง่ายมากที่จะผลักดันภาพนักเทียบท่าเพื่อ ECR เป็นAmazon ECR หาง Credential Helper เพียงติดตั้งตามคำแนะนำที่มีให้อัปเดตของคุณ~/.docker/config.jsonดังต่อไปนี้:

{
    "credsStore": "ecr-login"
}

และคุณจะสามารถที่จะผลักดัน / docker loginดึงภาพของคุณโดยไม่ต้อง


ฉันได้รับข้อผิดพลาดเดียวกันหลังจากทำตามคำแนะนำในบทความนี้
ryechus

1

ฉันพบปัญหานี้และทำงานบน OSX ได้ดี ฉันเห็นคำตอบของ Oliver Salzburg และตรวจสอบ ~ / .docker / config.json ของฉัน มันมีหนังสือรับรองการอนุญาตหลายใบจากบัญชี AWS ต่างๆที่ฉันมี ฉันลบไฟล์และหลังจากใช้งานเข้าสู่ระบบอีกครั้งมันทำงานได้


1

ตรวจสอบให้แน่ใจว่าคุณใช้พื้นที่ที่ถูกต้องในaws ecr get-loginนั้นจะต้องตรงกับพื้นที่ที่คุณสร้างพื้นที่เก็บข้อมูล


1

ปัญหาของฉันมีข้อมูลรับรอง AWS หลายรายการ เริ่มต้นและ dev ตั้งแต่ฉันพยายามปรับใช้เพื่อ dev งานนี้:

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


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)

ในที่สุดเราก็แก้ปัญหาด้วยการอัพเกรด Docker จากนั้นกดก็ใช้ได้

พบปัญหากับ Docker 1.10.x และแก้ไขด้วย Docker 1.11.x

หวังว่านี่จะช่วยได้


0

หากคุณกำลังแยกบัญชี AWS สำหรับวัตถุประสงค์ CI / CD และมีที่เก็บ ECR หนึ่งแห่งที่ใช้ร่วมกันระหว่างบัญชี AWS หลายบัญชีคุณอาจต้องเปลี่ยน~/.docker/config.jsonด้วยตนเอง

สมมติว่าคุณมีการตั้งค่าเหล่านี้:

  1. ECR เป็นเจ้าของโดย ID บัญชี AWS 00000000000000
  2. เซิร์ฟเวอร์ CI เป็นเจ้าของโดย ID บัญชี AWS 99999999999999

ถ้าคุณโทรaws ecr get-login --region us-west-2 | bashภายในเซิร์ฟเวอร์ CI ~/.docker/config.jsonของคุณนักเทียบท่าจะสร้างข้อมูลประจำตัวชั่วคราวใน

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

แต่คุณต้องการชี้ไปที่บัญชีของ ECR ดังนั้นคุณต้องเปลี่ยนชื่อโฮสต์

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

หมายเหตุสถานการณ์นี้ขึ้นอยู่กับว่าคุณจัดตั้งผู้ใช้ / นโยบาย IAM เพื่อให้สามารถเข้าถึง ECR ได้อย่างไร


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-include-email" ก็จะทำให้เกิดข้อผิดพลาดอื่น เอาต์พุตของคำสั่งด้านบนดูเหมือนว่าการเข้าสู่ระบบนักเทียบท่านี้ -u AWS -p ********************** ใหญ่มาก ****** คัดลอกและดำเนินการ ตอนนี้มันจะแสดง "ล็อกอินสำเร็จ" ตอนนี้คุณสามารถผลักดันภาพของคุณไปยัง ECR

ตรวจสอบให้แน่ใจว่ากฎ AMI ของคุณมีสิทธิ์สำหรับผู้ใช้ที่คุณพยายามเข้าสู่ระบบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.