Не удается войти в учетную запись Docker

121
OS: Ubuntu 18.04 Server
Docker 18.3 CE

Я вошел на сервер со своего ноутбука с Windows 10, используя сеанс PuTTY SSH.

У меня нет Docker на моем локальном ноутбуке с Windows, поэтому вся работа выполняется на удаленном сервере.

Я могу выполнять все команды Docker на удаленном сервере, используя сеанс терминала.

Однако, когда я пытаюсь сохранить свое изображение в концентраторе Docker, когда я пытаюсь войти в систему, используя:

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

Ответы:

206

Изменить 2019-04-07:

Поскольку это выбранный в настоящее время ответ, я думаю, что люди должны сначала попробовать решение @Anish Varghese ниже, поскольку оно кажется самым простым. Вам нужно только установить gnupg2 и передать пакеты:

sudo apt install 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 и пройти ( 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и установить следующий пароль «проход инициализирован» (без кавычек).

5.5) pass show docker-credential-helpers/docker-pass-initialized-check. Вы должны увидеть, что проход инициализирован.

5.6) docker-credential-pass list

6) создайте ~ / .docker / config.json с помощью:

{
"credsStore": "pass"
}

7) вход в докер теперь должен работать

Примечание. Если вы получите сообщение об ошибке «хранилище пропусков не инициализировано» при следующем запуске, выполните следующую команду (она перезагрузит хранилище пропусков в памяти):

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

Он запросит ваш пароль и инициализирует хранилище пропусков.

Это основано на этом обсуждении: https://github.com/moby/moby/issues/25169#issuecomment-431129898

Жан-Филипп Жодуан
источник
У меня не получилось. При попытке входа в докер я получаю сообщение: «Ошибка при получении учетных данных - ошибка: статус выхода 1, выход:` хранилище пропусков не инициализировано »
GlacialSpoon,
Я начал снова после удаления прохода и удаления папки .password-store. Кажется, теперь лучше. Спасибо.
GlacialSpoon
2
@ Жан-Филипп Жоден, спасибо. Кажется, мне нужно вызывать это периодически, иначе вызов входа в систему не может найти учетные данные. Я читал, что это может быть как-то связано с истечением срока действия кеша gpg, и "проходное шоу" его разбудит. Когда сервер перезагружается, мне нужно вернуться к шагу «пройти вставку», прежде чем все заработает. Это не очень удобно, но позволяет продолжить.
Ледяная ложка
1
Посмотрите ответ Аниша Варгезе ниже, это кажется самым простым и чистым решением.
Aurelien
1
@JoePhillips: Согласен с вами. Объединил свое решение с цитированием.
Jean-Philippe Jodoin
214

Установка следующих пакетов в ubuntu исправила мою проблему

sudo apt install gnupg2 pass
Аниш Варгезе
источник
1
у меня не сработало, но сработала и установка gpg: «sudo apt install gnupg2 pass gpg»
Йорг Бейер
6
У меня тоже работал на ubuntu 18.04. Я только выдал sudo apt install pass, остальное пришло как его зависимости
Álex
4
У меня работал на Unbuntu 18.04.
Gill Bates
5
В чем корень проблемы? а почему как gnupg2 passисправлю проблему?
Neo
1
У меня тоже работал на ubuntu 19.04
Аммад Халид
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

и это сработало!

bak2trak
источник
2
@Renrhaf Первый докер по умолчанию ищет "проход" там, где он ищет в цепочке ключей gnome и цепочке ключей osx в OS-X. Если не найден, то ищет org.freedesktop.secrets. Не найдено для ubuntu 18 (некоторые проблемы). После переименования его (docker-credential-secretservice) во что-то другое, он возвращается к созданию файла конфигурации самостоятельно. Вы можете посмотреть в папке home / .docker один файл config.json.
bak2trak
1
Я только что столкнулся с этой проблемой и решил ее этим методом - вроде. Я установил docker-credential-secretserviceиз GH, создал ~/.docker/config.jsonсодержимое, как указано выше, затем попытался войти в систему. Получил ошибку. Затем удалил .dockerпапку config.jsonи /usr/bin/docker-credential-secretserviceисполняемый файл, а затем docker loginснова запустился с успехом
Энди
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 07
1
Это решение сработало для меня, но оно сохраняет учетные данные в кодировке base 64. Я разместил ниже решение, в котором используется pass. stackoverflow.com/questions/50151833/…
Жан-Филипп Жоден
4

Если apt install gnupg2 pass у вас не работает, вы также можете установить пакет golang-docker-credential-helpers

Хуанра
источник
4

Это тоже может помочь, по крайней мере, так было в 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
источник
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работал.

CodeManX
источник
2

Для меня самым простым решением было создать файл config.json в каталоге .docker внутри домашнего каталога пользователя:

/home/.docker/config.json

Затем я скопировал содержимое этого файла с сервера, с которого я смог войти в докер-хаб.

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

}

Это простой обходной путь, потому что он не требует от вас установки или обновления какого-либо пакета, что мы не можем легко сделать на производственных серверах.

Г-н Кашьяп
источник
К сожалению, это единственный обходной путь, который сработал для меня ... по крайней мере, можно использовать токен доступа вместо pwd вашей учетной записи.
Джордж Аристи
Путь "~ / home / .docker / config.json" кажется неправильным. Вы, вероятно, имели в виду "~ / .docker / config.json"
BlakBat
Спасибо, что указали, обновили путь.
Г-н Кашьяп
1

Что ж, вы уже читали решение, но факт в том, что gnupg2 теперь не установлен по умолчанию в Ubuntu 18+. Это причина, по которой через некоторое время apt upgradeвсе будет вести себя немного иначе.

октамуа
источник
0

После ответа у меня возникло несколько проблем.

  1. Генерация ключа застряла на энтропии (шаг 5.2).

К счастью, исправить это легко, и вам нужно только установить пакет rng-tools: https://stackoverflow.com/a/32941065

  1. На pass init <key>шаге 5.3 появилась ошибка gpg: decryption failed: No secret key.

На самом деле эта проблема связана с тем, что секретный ключ ограничен привилегиями root.

Я сменил владельца .gnupg .password-store папок в домашнем каталоге моего пользователя.

Затем перезагрузите dirmngr, чтобы избежать предупреждения о "небезопасном владении":

gpgconf --kill dirmngr

Если вы не хотите делать все это, вы можете запустить все команды ответа как root / sudo.

v0id
источник
0

создание следующего решило это для меня:

AWS_CONFIG=$AWS_DIR/config
AWS_CREDENTIALS=$AWS_DIR/credentials
mkdir -p $AWS_DIR
Данлецкий
источник
0

Простое решение: просто удалите "credsStore": "secretservice"из ~ / .docker / config.json

MxWild
источник
-3

Установите следующие пакеты в ubuntu

sudo apt install gnupg2 pass

Это сработало для меня.

Вирани Четан
источник
1
Это не добавляет к предыдущим ответам того же или лучшего содержания.
Карл Рихтер