Как заставить команду 'docker login' игнорировать существующий помощник по учетным данным? - PullRequest
1 голос
/ 15 марта 2019

У меня есть система, в которой я пытаюсь выполнить команду docker login, это система безголового linux, но, к сожалению, установлена ​​только Docker Credentials Helper docker-credential-secretservice.

Это означает, что я получаю следующую ошибку:

Error saving credentials: error storing credentials - err: exit status 1, out: `Cannot autolaunch D-Bus without X11 $DISPLAY`

Имеет смысл получить это как:

По умолчанию Docker ищет собственный двоичный файл накаждая из платформ, то есть «osxkeychain» в macOS, «wincred» в windows и «pass» в Linux. Особый случай заключается в том, что в Linux Docker возвращается к двоичному файлу «secretservice», если не может найти двоичный файл «pass» .Если ни один из этих двоичных файлов отсутствует, он сохраняет учетные данные (т. Е. Пароль) в кодировке base64 в файлах конфигурации, описанных выше.

И поскольку secretservice помощник использует хранилище учетных данных GUI, он пытается открытьокно, которое недоступно в системе без монитора.

У меня нет контроля над системой, поэтому я не могу удалить файл /usr/bin/docker-credential-secretservice, чтобы заставить docker login вернуться к конфигурациивместо использования secretservice helper.

Я могу создавать и перечислять файлы в домашней папке моего пользователя.Я попытался выполнить команду следующим образом:

docker --config ./docker login -u <user-name> -p <password> <repository>

У меня сложилось впечатление, что команда login создаст config.json в ./docker (я заметил, что docker login willсоздайте папку, если она не существует).Это работает в системе, в которой не установлены никакие помощники, но не в рассматриваемой системе.

Я также пытался создать ~/.docker/config.json с чем-то вроде:

echo '{"credStore":""}' > ~/.docker/config.json

Надеясь, что docker login получит подсказку, чтобы не использовать никаких помощников для хранилища учетных данных.

Есть ли способ для не-администратора заставить docker login вернуться к:

хранит учетные данные (т.е. пароль) в кодировке base64 в конфигурационных файлах, описанных выше.Без удаления помощника по учетным данным?

(в качестве примечания я, конечно, попрошу удалить /usr/bin/docker-credential-secretservice, но, если это невозможно или для использования в будущем, есть ли альтернатива?решения?)

1 Ответ

1 голос
/ 10 июля 2019

К сожалению, Docker (по состоянию на 18.06) сначала ищет двоичные файлы docker-credential-*, и, если он находит какие-либо из них, он автоматически перезаписывает значение "credsStore" в ~/.docker/config.json.

Ваш единственный обходной путь - установить docker-credential-pass в вашем домашнем каталоге, чтобы Docker использовал это вместо docker-credential-secretservice. docker-credential-pass не требует графического интерфейса.

Шаги для установки docker-credential-pass:

Ошибка входа в докер на сервере без установленного X11

...