Я не уверен, что я уже зарегистрировался в реестре докеров в строке cmd с помощью cmd: docker login. Как вы можете проверить или посмотреть, вошли ли вы в систему или нет, не пытаясь нажать?
Как узнать, подключен ли докер уже к серверу реестра докеров
Ответ 1
редактировать
Вы можете войти в docker с docker login <repository>
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If
you don't have a Docker ID, head over to https://hub.docker.com to
create one.
Username:
Если вы уже вошли в систему, приглашение будет выглядеть так:
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If
you don't have a Docker ID, head over to https://hub.docker.com to
create one.
Username (myusername):
Ответ ниже устарел, docker info
больше не показывает информацию о пользователе.
исторический
Когда вы вошли в систему, ваше имя пользователя и реестр отображаются в команде docker info
Как это:
[[email protected] ~]$ docker info
Containers: 12
Running: 2
..etc...
...
Username: francobolli
Registry: https://index.docker.io/v1/
Изменить: Примечание; это работает только для index.docker.io
repo. Вход только сохраняет учетные данные на диске, когда он им нужен, например, при запуске docker pull localhost:5000/image
или docker pull quay.io/username/reponame
.
Отредактированный после этого был отмечен в комментариях к этому вопросу: как я могу узнать, зарегистрирован ли я в приватном реестре докеров
Ответ 2
Я использую один из следующих двух способов для этой проверки:
1. Просмотр файла config.json:
Если вы вошли на "private.registry.com", вы увидите запись, аналогичную следующей в ~/.docker/config.json
:
"auths": {
"private.registry.com": {
"auth": "gibberishgibberishgibberishgibberishgibberishgibberish"
}
}
2: Попробуйте еще раз войти в Docker:
Если вы пытаетесь узнать, есть ли у вас уже активный сеанс с private.registry.com, попробуйте войти снова:
bash$ docker login private.registry.com
Username (logged-in-user):
Если вы получаете вывод, подобный приведенному выше, это означает, что logged-in-user
уже имел активный сеанс с private.registry.com
. Если вместо этого вас попросят ввести имя пользователя, это будет означать, что активного сеанса нет.
Ответ 3
Схема учетных данных докера не удивительно проста, просто посмотрите:
cat ~\.docker\config.json
{
"auths": {
"dockerregistry.myregistry.com": {},
"https://index.docker.io/v1/": {}
В Windows вы также можете использовать инструмент для ввода учетных данных, в котором также указано имя пользователя... и я думаю, что вы даже можете восстановить пароль
. "C:\Program Files\Docker\Docker\resources\bin\docker-credential-wincred.exe" list
{"https://index.docker.io/v1/":"kcd"}
Ответ 4
Для частных реестров ничего не отображается в docker info
. Однако команда выхода из системы сообщит вам, что вы вошли в систему:
$ docker logout private.example.com
Not logged in to private.example.com
(Хотя это заставит вас снова войти в систему.)
Ответ 5
Просто проверено, сегодня это выглядит так:
$ docker login
Authenticating with existing credentials...
Login Succeeded
ПРИМЕЧАНИЕ: это на macOS с последней версией Docker CE, docker-credential-helper - как с домашним.
Ответ 6
Ответы здесь пока не так полезны:
-
docker info
больше не предоставляет эту информацию -
docker logout
является серьезным неудобством - если вы уже не знаете учетные данные и можете легко перерегистрироваться - Ответ на
docker login
кажется довольно ненадежным и не так просто разобрать по программе
Мое решение, которое сработало для меня, основывается на комментарии @noobuntu: я понял, что если я уже знаю изображение, которое я хочу потянуть, но я не уверен, что пользователь уже вошел в систему, я могу сделать это:
try pulling target image
-> on failure:
try logging in
-> on failure: throw CannotLogInException
-> on success:
try pulling target image
-> on failure: throw CannotPullImageException
-> on success: (continue)
-> on success: (continue)
Ответ 7
В Windows вы можете проверить "авторизации" (auths) входа в систему, посмотрев этот файл: [USER_HOME_DIR].docker\config.json
Пример: c:\USERS\YOUR_USERANME.docker\config.json
Для учетных данных Windows это будет выглядеть примерно так
{
"auths": {
"HOST_NAME_HERE": {},
"https://index.docker.io/v1/": {}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.0 (windows)"
},
"credsStore": "wincred",
"stackOrchestrator": "swarm"
}
Ответ 8
Вы можете выполнить следующую команду, чтобы увидеть имя пользователя, под которым вы вошли, и используемый реестр:
docker system info | grep -E 'Username|Registry'
Ответ 9
По крайней мере, в "Докере для Windows" вы можете увидеть, вошли ли вы в концентратор докеры через интерфейс. Просто щелкните правой кнопкой мыши значок докеры в области уведомлений Windows:
Ответ 10
Используйте команду, как показано ниже:
docker info | grep 'name'
WARNING: No swap limit support
Username: <strong>jonasm2009</strong>
Ответ 11
Как отметил @Christian, лучше всего сначала попробовать операцию, а затем войти только в случае необходимости. Проблема в том, что "если необходимо" не так очевидно, чтобы делать это надежно. Один из подходов состоит в том, чтобы сравнить stderr операции докера с некоторыми известными строками (методом проб и ошибок). Например,
try "docker OPERATION"
if it failed:
capture the stderr of "docker OPERATION"
if it ends with "no basic auth credentials":
try docker login
else if it ends with "not found":
fatal error: image name/tag probably incorrect
else if it ends with <other stuff you care to trap>:
...
else:
fatal error: unknown cause
try docker OPERATION again
if this fails: you're SOL!
Ответ 12
Если вам нужно простое значение true/false
, вы можете docker.json
свой docker.json
в jq
.
is_logged_in() {
cat ~/.docker/config.json | jq -r --arg url "${REPOSITORY_URL}" '.auths | has($url)'
}
if [[ "$(is_logged_in)" == "false" ]]; then
# do stuff, log in
fi
Ответ 13
Если вы уже вошли в реестр Docker, просто используйте
Вы увидите ответ.