ไม่สามารถเข้าสู่ระบบบัญชี Docker


125
OS: Ubuntu 18.04 Server
Docker 18.3 CE

ฉันเข้าสู่เซิร์ฟเวอร์จากแล็ปท็อป Windows 10 ของฉันโดยใช้เซสชัน PuTTY SSH

ฉันไม่มี Docker บนแล็ปท็อป Windows ในเครื่องดังนั้นงานทั้งหมดจึงเสร็จสิ้นบนเซิร์ฟเวอร์ระยะไกล

ฉันสามารถเรียกใช้คำสั่ง Docker ทั้งหมดบนเซิร์ฟเวอร์ระยะไกลโดยใช้เซสชันเทอร์มินัล

อย่างไรก็ตามเมื่อฉันพยายามบันทึกภาพไปยัง Docker hub เมื่อฉันพยายามเข้าสู่ระบบโดยใช้:

docker login

ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

error getting credentials - err: exit status 1, out: `GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.secrets was not provided by any .service files`

ฉันไม่ได้รับข้อความแสดงข้อผิดพลาดใด ๆ เมื่อฉันสร้างอิมเมจบนเซิร์ฟเวอร์ระยะไกล

ฉันยังไม่เห็นโฟลเดอร์. docker ในโฮมไดเร็กทอรีที่เกี่ยวข้องบนรีโมตเซิร์ฟเวอร์ ความคิดใด ๆ ?


วันนี้ฉันพบปัญหาที่ค่อนข้างคล้ายกันในขณะที่พยายามเรียกใช้docker loginจากภายในคอนเทนเนอร์ LXD / LXC สิ่งที่ฉันแก้ไขโดยการคัดลอก.docker/config.jsonจากโฮสต์ของฉันไปยัง$HOME/.docker/ไดเรกทอรีของฉันภายในคอนเทนเนอร์ LXD / LXC ซึ่งฉันสร้างขึ้นด้วยตนเอง ตอนนี้ฉันกำลังพยายามหาปัญหาอื่นอยู่ แต่อยากถามว่าคุณเคยลองทำหรือยัง?
code_dredd

ไม่ฉันยอมแพ้บน Windows พรุ่งนี้ฉันจะได้รับแล็ปท็อปเครื่องใหม่ซึ่งฉันจะติดตั้ง Ubuntu 18 เป็นดูอัลบูต
EastsideDev

ผมได้เปิดขึ้นปัญหาสำหรับที่นี่github.com/docker/cli/issues/1136 หากพวกเขาพบวิธีแก้ปัญหานี้ฉันจะโพสต์ไว้ที่นี่
thishandp7

คำตอบ:


217

แก้ไข 2019-04-07:

เนื่องจากนี่เป็นคำตอบที่เลือกไว้ในปัจจุบันฉันคิดว่าผู้คนควรลองใช้โซลูชัน @Anish Varghese ด้านล่างก่อนเพราะดูเหมือนจะง่ายที่สุด คุณจะต้องติดตั้งแพ็คเกจ gnupg2 และ pass เท่านั้น:

sudo apt ติดตั้ง gnupg2 pass

หากไม่ได้ผลคุณสามารถลองวิธีแก้ปัญหาเดิมของฉันได้ที่นี่:

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

1) ดาวน์โหลด docker-credential-pass จากhttps://github.com/docker/docker-credential-helpers/releases

2) tar -xvf docker-credential-pass.tar.gz

3) chmod u+x docker-credential-pass

4) mv docker-credential-pass /usr/bin

5) คุณจะต้องตั้งค่า docker-credential-pass (ขั้นตอนต่อไปนี้อ้างอิงจากhttps://github.com/docker/docker-credential-helpers/issues/102#issuecomment-388634452 )

5.1) ติดตั้ง gpg และ pass ( apt-get install gpg pass)

5.2) gpg --generate-keyป้อนข้อมูลของคุณ คุณควรเห็นสิ่งนี้:

pub   rsa3072 2018-10-07 [SC] [expires: 2020-10-06]
      1234567890ABCDEF1234567890ABCDEF12345678

คัดลอกบรรทัด 123 ...

5.3) pass init 1234567890ABCDEF1234567890ABCDEF12345678(วาง)

5.4) pass insert docker-credential-helpers/docker-pass-initialized-checkและตั้งรหัสผ่านถัดไป "pass is initialized" (ไม่มีเครื่องหมายอัญประกาศ)

pass show docker-credential-helpers/docker-pass-initialized-check5.5) คุณควรเห็นว่าบัตรผ่านเริ่มต้นแล้ว

5.6) docker-credential-pass list

6) สร้าง ~ / .docker / config.json ด้วย:

{
"credsStore": "pass"
}

7) การเข้าสู่ระบบนักเทียบท่าควรใช้งานได้แล้ว

หมายเหตุ: หากคุณได้รับข้อผิดพลาด "pass store is uninitialized" ในการรันในอนาคตให้รันคำสั่งด้านล่าง (มันจะโหลดที่เก็บพาสซ้ำในหน่วยความจำ):

pass show docker-credential-helpers/docker-pass-initialized-check

จะถามรหัสผ่านของคุณและจะเริ่มต้นที่เก็บบัตร

สิ่งนี้มาจากการสนทนานี้: https://github.com/moby/moby/issues/25169#issuecomment-431129898


ไม่ได้ผลสำหรับฉัน ฉันได้รับข้อความเมื่อลองล็อกอินนักเทียบท่า: "error getting credentials - err: exit status 1, out:" pass store is uninitialized "
GlacialSpoon

ฉันเริ่มต้นอีกครั้งหลังจากถอนการติดตั้ง pass และลบโฟลเดอร์ .password-store ดูเหมือนจะดีขึ้นแล้ว ขอบคุณ.
GlacialSpoon

2
@ Jean-Phillipe Jodoin ขอบคุณ ดูเหมือนว่าฉันต้องเรียกสิ่งนี้เป็นระยะ ๆ มิฉะนั้นการโทรเข้าสู่ระบบจะไม่พบข้อมูลรับรอง ฉันอ่านว่านี่อาจเกี่ยวข้องกับการที่แคช gpg หมดอายุและ "pass show" จะปลุกมันขึ้นมา เมื่อเซิร์ฟเวอร์รีบูตฉันต้องกลับไปที่ขั้นตอน "แทรกผ่าน" ก่อนที่สิ่งต่างๆจะทำงาน มันไม่ค่อยสะดวก แต่ก็ทำให้ฉันสามารถดำเนินการต่อได้
GlacialSpoon

1
ตรวจสอบคำตอบโดย Anish Varghese ด้านล่างดูเหมือนว่าจะเป็นวิธีที่ง่ายและสะอาดที่สุด
Aurelien

1
@JoePhillips: เห็นด้วยกับคุณ รวมโซลูชันของเขาเข้ากับการอ้างอิง
Jean-Philippe Jodoin

222

ติดตั้งแพ็คเกจต่อไปนี้ใน ubuntu แก้ไขปัญหาของฉัน

sudo apt install gnupg2 pass

1
ไม่ได้ผลสำหรับฉัน แต่การติดตั้ง gpg ก็ใช้งานได้: "sudo apt install gnupg2 pass gpg"
Jörg Beyer

6
ทำงานให้ฉันบน ubuntu 18.04 ด้วย ฉันออกให้เท่านั้นsudo apt install passส่วนที่เหลือมาเป็นที่พึ่งพา
Álex

4
ทำงานให้ฉันใน Unbuntu 18.04
Gill Bates

5
ต้นตอของปัญหาคืออะไร? และทำไมgnupg2 passจะแก้ไขปัญหาได้อย่างไร
นีโอ

1
ทำงานให้ฉันที่ ubuntu 19.04 ด้วย
Ammad Khalid

41

ฉันประสบปัญหาเดียวกันใน ubuntu 18.08 และในที่สุดก็ใช้ได้ผลสำหรับฉัน .. เป็นวิธีแก้ปัญหาชั่วคราว

ฉันได้สร้างโฟลเดอร์นี้home/.docker/เนื่องจากโซลูชันบางอย่างแนะนำให้ฉันสร้างไฟล์config.jsonและเขียนข้อมูลประจำตัวเริ่มต้นในนั้นเช่น

{
    "credsStore": "pass"
}
  • ฉันลบไฟล์config.jsonนี้
  • จากนั้นเปลี่ยนชื่อ docker-credential-secretservice เป็นอย่างอื่นเพื่อไม่ให้ดึงไฟล์นี้ขึ้นมา

    sudo mv / usr / bin / docker-credential-Secretservice / usr / bin / docker-credential-Secretservice_x

และมันได้ผล!


2
โดยค่าเริ่มต้น@Renrhaf นักเทียบท่าแรกจะมองหา "pass" ซึ่งจะค้นหาใน gnome key-chain และ osx-keychain ใน OS-X org.freedesktop.secretsหากยังไม่ได้พบแล้วมองหา ไม่พบสำหรับ ubuntu 18 (บางปัญหา) หลังจากเปลี่ยนชื่อ (docker-credential-Secretservice) เป็นอย่างอื่นแล้วมันจะกลับไปสร้างไฟล์ config ด้วยตัวเองคุณสามารถดูในโฟลเดอร์ home / .docker ไฟล์ config.json หนึ่งไฟล์จะถูกสร้างขึ้น
bak2trak

1
ฉันเพิ่งพบปัญหานี้และแก้ไขด้วยวิธีนี้ - ประเภทของไฟล์. ฉันติดตั้งdocker-credential-secretserviceจาก GH สร้าง~/.docker/config.jsonเนื้อหาที่มีด้านบนแล้วพยายามเข้าสู่ระบบได้รับข้อผิดพลาด จากนั้นลบ.dockerโฟลเดอร์config.jsonและ/usr/bin/docker-credential-secretserviceไฟล์ปฏิบัติการแล้วรันdocker loginอีกครั้งด้วยความสำเร็จ
Andy

1
ให้ทุกคนมีปัญหาเดียวกัน: อย่าลืมให้config.json ลบ ฉันเกือบจะยอมแพ้กับสิ่งนี้ แต่มันใช้งานได้ในช่วงเวลาสุดท้ายหลังจากที่ฉันลบ config.json
sr9yar

2
สำหรับฉันฉันถอนการติดตั้งdocker-composeแล้วเรียกใช้การsudo mv /usr/bin/docker-credential-secretservice /usr/bin/docker-credential-secretservice_xเปลี่ยนชื่อของคุณมันใช้งานได้ มีใครรู้บ้างว่าdocker-credential-secretserviceใช้ทำอะไร?
user1032613

1
วิธีนี้ใช้ได้ผลสำหรับฉัน แต่จะบันทึกข้อมูลรับรองฐาน 64 ที่เข้ารหัส ฉันโพสต์ด้านล่างวิธีแก้ปัญหาที่ใช้บัตรผ่าน stackoverflow.com/questions/50151833/…
Jean-Philippe Jodoin

6

สิ่งนี้อาจช่วยได้เช่นกันอย่างน้อยก็ใน Ubuntu 20.04:

wget https://github.com/docker/docker-credential-helpers/releases/download/v0.6.3/docker-credential-secretservice-v0.6.3-amd64.tar.gz && tar -xf docker-credential-secretservice-v0.6.3-amd64.tar.gz && chmod +x docker-credential-secretservice && mv docker-credential-secretservice /usr/local/bin/

https://hackernoon.com/getting-rid-of-docker-plain-text-credentials-88309e07640d   https://github.com/docker/docker-credential-helpers/releases


4

หาก apt install gnupg2 pass ไม่ได้ผลสำหรับคุณคุณยังสามารถติดตั้งแพ็คเกจ golang-docker-credential-helpers


3

สำหรับฉันdocker pushล้มเหลวกับ

denied: requested access to the resource is denied

... ดังนั้นฉันต้องการdocker loginแต่ได้รับสิ่งต่อไปนี้หลังจากป้อนข้อมูลรับรอง:

Remote error from secret service:
  org.freedesktop.DBus.Error.UnknownMethod:
  No such interface 'org.freedesktop.Secret.Collection' on object at path
  /org/freedesktop/secrets/collection/login

Error saving credentials:
  error storing credentials - err: exit status 1, out:
  No such interface 'org.freedesktop.Secret.Collection' on object at path
  /org/freedesktop/secrets/collection/login

โชคดีที่ฉันมีเครื่องอื่นที่ฉันสามารถเข้าสู่ระบบได้โดยไม่มีการเปลี่ยนแปลงใด ๆ ในระบบ ฉันคัดลอกเนื้อหาของ~/.docker/config.json...

{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "<some-hash-value>"
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.09.2 (linux)"
        }
}

... ไปยังเครื่องอื่นและdocker pushทำงาน


3

สำหรับฉันวิธีแก้ปัญหาที่ง่ายที่สุดคือสร้างไฟล์ config.json ภายใต้ไดเร็กทอรี. docker ภายในโฮมไดเร็กทอรีของผู้ใช้:

/home/.docker/config.json

จากนั้นฉันคัดลอกเนื้อหาของไฟล์นี้จากเซิร์ฟเวอร์จากจุดที่ฉันสามารถล็อกอินเข้าสู่ Docker hub

{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "SOMEVALUE"
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.06.1-ce (linux)"
        }

}

เป็นวิธีแก้ปัญหาที่ง่ายเนื่องจากไม่ต้องการให้คุณติดตั้งหรืออัปเดตแพ็คเกจใด ๆ ที่เราไม่สามารถทำได้อย่างง่ายดายบนเซิร์ฟเวอร์ที่ใช้งานจริง


น่าเศร้านี่เป็นวิธีแก้ปัญหาเดียวที่ใช้ได้ผลสำหรับฉัน ... อย่างน้อยก็เป็นไปได้ที่จะใช้โทเค็นการเข้าถึงแทน pwd ของบัญชีของคุณ
George Aristy

เส้นทาง "~ / home / .docker / config.json" ดูเหมือนจะไม่ถูกต้อง คุณอาจหมายถึง "~ / .docker / config.json"
BlakBat

ขอบคุณสำหรับการชี้ให้เห็นปรับปรุงเส้นทาง
Mr Kashyap

1

คุณได้อ่านวิธีแก้ปัญหาแล้ว แต่ความจริงก็คือตอนนี้ gnupg2 ยังไม่ได้ติดตั้งโดยค่าเริ่มต้นใน Ubuntu 18+ นั่นคือเหตุผลบางครั้งหลังจากapt upgradeนั้นสิ่งต่าง ๆ ทำงานแตกต่างกันเล็กน้อย


1

วิธีแก้ปัญหาง่ายๆ: เพียงแค่ลบออก"credsStore": "secretservice"จาก ~ / .docker / config.json


0

ตามคำตอบฉันมีปัญหาหลายประการ

  1. การสร้างคีย์ค้างอยู่ที่เอนโทรปี (ขั้นตอนที่ 5.2)

โชคดีที่การแก้ไขนั้นง่ายและคุณต้องติดตั้งแพ็คเกจrng-tools: https://stackoverflow.com/a/32941065

  1. ในpass init <key>(ขั้นตอนที่ 5.3) ข้อผิดพลาดgpg: decryption failed: No secret keyปรากฏขึ้น

ในความเป็นจริงปัญหานี้เกิดจากการที่คีย์ลับถูก จำกัด สิทธิ์การใช้งานรูท

ฉันเปลี่ยนความเป็นเจ้าของ.gnupg .password-storeโฟลเดอร์ในบ้านของผู้ใช้

จากนั้นโหลด dirmngr ซ้ำเพื่อหลีกเลี่ยงคำเตือน "การเป็นเจ้าของที่ไม่ปลอดภัย":

gpgconf --kill dirmngr

หากคุณไม่ต้องการทำสิ่งที่คุณสามารถเรียกใช้คำสั่งทั้งหมดของคำตอบเป็น root / sudo


0

การสร้างสิ่งต่อไปนี้แก้ไขได้สำหรับฉัน:

AWS_CONFIG=$AWS_DIR/config
AWS_CREDENTIALS=$AWS_DIR/credentials
mkdir -p $AWS_DIR

0

คุณไม่มีที่เก็บข้อมูลรับรอง ลองใช้ Gnome Keyring ขึ้นอยู่กับการติดตั้งลินุกซ์ของคุณอาจมีการติดตั้งแล้ว คุณสามารถใช้ GK เพื่อจัดเก็บข้อมูลการตรวจสอบสิทธิ์อย่างปลอดภัยใน Chrom {e, ium} (และอาจมากกว่านั้น) ได้เช่นกัน กลับไปที่ Docker คุณต้องมี. docker / config.json เช่น:

{
    "credsStore": "secretservice"
}

จากนั้นตรวจสอบให้แน่ใจว่าคุณได้กำหนดค่า PAM เพื่อปลดล็อกพวงกุญแจ: https://wiki.archlinux.org/index.php/GNOME/Keyring#PAM_method


-3

ติดตั้งแพ็คเกจต่อไปนี้ในอูบุนตู

sudo apt install gnupg2 pass

สิ่งนี้ใช้ได้ผลสำหรับฉัน


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