Tidak dapat masuk ke akun Docker

121
OS: Ubuntu 18.04 Server
Docker 18.3 CE

Saya masuk ke server, dari laptop Windows 10 saya, menggunakan sesi PuTTY SSH.

Saya tidak memiliki Docker di laptop Windows lokal saya, jadi semua pekerjaan dilakukan di server jarak jauh.

Saya dapat menjalankan semua perintah Docker, di server jarak jauh, menggunakan sesi terminal.

Namun, ketika saya mencoba menyimpan image saya ke hub Docker, ketika saya mencoba masuk, menggunakan:

docker login

Saya mendapatkan pesan kesalahan berikut:

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`

Saya tidak mendapatkan pesan kesalahan apa pun, ketika saya membuat gambar saya di server jauh.

Saya juga tidak melihat folder .docker di direktori home terkait di server jarak jauh. Ada ide?

EastsideDev
sumber
Saya mengalami masalah yang agak mirip hari ini ketika mencoba menjalankan docker logindari dalam wadah LXD / LXC. Yang khusus itu saya selesaikan dengan menyalin .docker/config.jsondari host saya ke $HOME/.docker/direktori saya di dalam wadah LXD / LXC, yang saya buat secara manual. Saat ini saya mencoba mencari tahu masalah lain sekarang, tetapi ingin bertanya apakah Anda sudah mencoba melakukan ini?
code_dredd
Tidak, saya menyerah pada Windows. Saya akan mendapatkan laptop baru besok, di mana saya akan menginstal Ubuntu 18 sebagai dual boot.
EastsideDev
Saya telah membuka masalah untuk ini di sini github.com/docker/cli/issues/1136 . Jika mereka menemukan solusi untuk ini, saya akan mempostingnya di sini.
thishandp7

Jawaban:

206

Sunting 07-04-2019:

Karena ini adalah jawaban yang saat ini dipilih, saya pikir orang harus mencoba solusi @Anish Varghese di bawah ini terlebih dahulu karena tampaknya yang paling mudah. Anda hanya perlu menginstal gnupg2 dan paket pass:

sudo apt menginstal gnupg2 pass

Jika tidak berhasil, Anda dapat mencoba solusi asli saya di sini:

Saya memiliki masalah yang sama. jawaban bak2trak berfungsi, tetapi kredensial disimpan dalam teks yang jelas. Inilah solusinya jika Anda ingin menyimpannya di penyimpanan kata sandi.

1) Unduh docker-credential-pass dari 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) Anda perlu menyiapkan docker-credential-pass (langkah-langkah berikut didasarkan pada https://github.com/docker/docker-credential-helpers/issues/102#issuecomment-388634452 )

5.1) instal gpg dan pass ( apt-get install gpg pass)

5.2) gpg --generate-key, masukkan informasi Anda. Anda akan melihat sesuatu seperti ini:

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

Salin baris 123 ...

5.3) pass init 1234567890ABCDEF1234567890ABCDEF12345678(tempel)

5.4) pass insert docker-credential-helpers/docker-pass-initialized-checkdan setel kata sandi berikutnya "pass diinisialisasi" (tanpa tanda kutip).

5.5) pass show docker-credential-helpers/docker-pass-initialized-check. Anda akan melihat pass diinisialisasi.

5.6) docker-credential-pass list

6) buat ~ / .docker / config.json dengan:

{
"credsStore": "pass"
}

7) Login buruh pelabuhan sekarang harus bekerja

Catatan: Jika Anda mendapatkan error "pass store is uninitialized" di masa mendatang, jalankan perintah di bawah ini (ini akan memuat ulang penyimpanan sandi di memori):

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

Ini akan menanyakan kata sandi Anda dan itu akan menginisialisasi penyimpanan pass.

Ini didasarkan pada diskusi ini: https://github.com/moby/moby/issues/25169#issuecomment-431129898

Jean-Philippe Jodoin
sumber
Tidak berhasil untuk saya. Saya mendapatkan pesan ketika saya mencoba login buruh pelabuhan: "kesalahan mendapatkan kredensial - err: status keluar 1, keluar:` pass store tidak diinisialisasi "
GlacialSpoon
Saya mulai lagi setelah menghapus pass dan menghapus folder penyimpanan kata sandi. Tampak lebih baik sekarang. Terima kasih.
GlacialSpoon
2
@ Jean-Phillipe Jodoin, terima kasih. Sepertinya saya harus memanggil ini secara berkala jika tidak, panggilan masuk gagal menemukan kredensial. Saya membaca ini mungkin ada hubungannya dengan cache gpg yang kedaluwarsa dan "pertunjukan lulus" membangunkannya. Ketika server reboot saya harus kembali ke langkah "pass insert" sebelum semuanya bekerja. Ini sangat tidak nyaman tetapi memungkinkan saya untuk melanjutkan.
GlacialSpoon
1
Simak jawaban Anish Varghese di bawah ini, sepertinya ini solusi termudah dan terbersih.
Aurelien
1
@ JoePhillips: Setuju dengan Anda. Mengintegrasikan solusinya dengan kutipan.
Jean-Philippe Jodoin
214

Instal Paket berikut di ubuntu memperbaiki masalah saya

sudo apt install gnupg2 pass
Anish Varghese
sumber
1
tidak berhasil untuk saya, tetapi juga menginstal gpg berhasil: "sudo apt install gnupg2 pass gpg"
Jörg Beyer
6
Bekerja untuk saya di ubuntu 18.04 juga. Saya hanya mengeluarkan sudo apt install pass, sisanya datang sebagai ketergantungannya
Álex
4
Bekerja untuk saya di Unbuntu 18.04.
Gill Bates
5
Apa akar masalahnya? dan mengapa bagaimana cara gnupg2 passmengatasi masalah tersebut?
Neo
1
Bekerja untuk saya di ubuntu 19.04 juga
Ammad Khalid
41

Saya menghadapi masalah yang sama di ubuntu 18.08 dan ini akhirnya berhasil untuk saya .. sebagai solusi sementara.

Saya telah membuat folder ini home/.docker/karena beberapa solusi menyarankan saya untuk membuat file config.jsondan menulis kredensial default di dalamnya yaitu

{
    "credsStore": "pass"
}
  • Saya menghapus file ini config.json.
  • Kemudian ganti nama docker-credential-secretervice ke yang lain sehingga tidak mengambil file ini.

    sudo mv / usr / bin / docker-credential-secretervice / usr / bin / docker-credential-secretervice_x

dan berhasil!

bak2trak.dll
sumber
2
@Renrhaf Pekerja pelabuhan pertama secara default mencari "pass" di mana ia mencari di gnome key-chain dan osx-keychain di OS-X. Jika tidak ditemukan maka cari org.freedesktop.secrets. Ini tidak ditemukan untuk ubuntu 18 (beberapa masalah). Setelah mengganti namanya (docker-credential-secretervice) menjadi sesuatu yang lain kemudian kembali untuk membuat file konfigurasi dengan sendirinya, Anda dapat melihat di folder home / .docker satu file config.json akan dibuat.
bak2trak
1
Saya baru saja mengalami masalah ini dan menyelesaikannya melalui metode ini - jenis. Saya menginstal docker-credential-secretservicedari GH, membuat ~/.docker/config.jsondengan konten seperti di atas kemudian mencoba masuk. Mendapat kesalahan. Kemudian menghapus .dockerfolder, config.jsondan /usr/bin/docker-credential-secretservicedapat dieksekusi dan kemudian berjalan docker loginkembali dengan sukses
Andy
1
Kepada siapa pun yang mengalami masalah yang sama: Jangan lupa untuk menghapus config.json . Saya hampir menyerah dalam hal ini, tetapi berhasil di saat-saat terakhir, setelah saya menghapus config.json.
sr9yar
2
Bagi saya, saya mencopot pemasangan docker-composedan kemudian menjalankan sudo mv /usr/bin/docker-credential-secretservice /usr/bin/docker-credential-secretservice_xpenggantian nama Anda , itu berhasil. Adakah yang tahu untuk apa docker-credential-secretservicedigunakan?
pengguna1032613
1
Solusi ini berfungsi untuk saya, tetapi menyimpan kredensial basis 64 yang dikodekan. Saya memposting di bawah ini solusi yang menggunakan pass. stackoverflow.com/questions/50151833/…
Jean-Philippe Jodoin
4

Jika apt install gnupg2 pass tidak berfungsi untuk Anda, Anda juga dapat menginstal paket golang-docker-credential-helpers

Juanra
sumber
4

Ini juga dapat membantu, setidaknya di 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

Vlax
sumber
3

Bagi saya docker pushgagal dengan

denied: requested access to the resource is denied

... jadi saya ingin docker logintetapi mendapatkan yang berikut setelah memasukkan kredensial:

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

Untungnya, saya memiliki mesin lain yang tersedia di mana saya dapat masuk tanpa ada perubahan pada sistem. Saya menyalin konten dari ~/.docker/config.json...

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

... ke mesin lain dan docker pushbekerja.

CodeManX
sumber
2

Bagi saya, solusi paling sederhana adalah membuat file config.json di bawah direktori .docker di dalam direktori home user:

/home/.docker/config.json

Kemudian saya menyalin konten file ini dari server tempat saya bisa login ke hub buruh pelabuhan.

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

}

Ini adalah solusi yang mudah, karena tidak mengharuskan Anda menginstal atau memperbarui paket apa pun yang tidak dapat kami lakukan dengan mudah di server produksi.

Tuan Kashyap
sumber
Sayangnya, ini adalah satu-satunya solusi yang berhasil untuk saya ... setidaknya mungkin menggunakan token akses alih-alih pwd akun Anda.
George Aristy
Path "~ / home / .docker / config.json" sepertinya salah. Anda mungkin bermaksud "~ / .docker / config.json"
BlakBat
Terima kasih telah menunjukkannya, meningkatkan jalannya.
Tuan Kashyap
1

Nah, Anda sudah membaca solusinya tetapi faktanya gnupg2 sekarang tidak diinstal secara default di Ubuntu 18+, Itulah alasannya beberapa saat kemudian apt upgrade, hal-hal berperilaku sedikit berbeda.

octamois
sumber
0

Setelah jawabannya, saya memiliki beberapa masalah.

  1. Pembuatan kunci terhenti di entropi (langkah 5.2).

Untungnya, perbaikannya mudah dan Anda hanya perlu menginstal paket rng-tools: https://stackoverflow.com/a/32941065

  1. Pada pass init <key>(langkah 5.3) kesalahan gpg: decryption failed: No secret keymuncul.

Faktanya masalah ini disebabkan oleh kunci rahasia yang dibatasi untuk hak akses root.

Saya mengubah kepemilikan .gnupg .password-storefolder di homedir pengguna saya.

Kemudian muat ulang dirmngr untuk menghindari peringatan "kepemilikan tidak aman":

gpgconf --kill dirmngr

Jika Anda tidak ingin melakukan semua itu, Anda dapat menjalankan semua perintah jawabannya sebagai root / sudo.

v0id
sumber
0

membuat yang berikut memecahkannya untuk saya:

AWS_CONFIG=$AWS_DIR/config
AWS_CREDENTIALS=$AWS_DIR/credentials
mkdir -p $AWS_DIR
Danletski
sumber
0

Solusi sederhana: hapus saja "credsStore": "secretservice"dari ~ / .docker / config.json

MxWild
sumber
-3

Instal Paket berikut di ubuntu

sudo apt install gnupg2 pass

Ini berhasil untuk saya.

Virani Chetan
sumber
1
Ini tidak memberikan tambahan apa pun pada jawaban sebelumnya dengan konten yang sama atau lebih baik.
Karl Richter