Я не впевнений, чи вже я ввійшов до реєстру докера в рядку cmd за допомогою входу cmd: docker. Як ви можете перевірити чи побачити, увійшли ви чи ні, не намагаючись натиснути?
Я не впевнений, чи вже я ввійшов до реєстру докера в рядку cmd за допомогою входу cmd: docker. Як ви можете перевірити чи побачити, увійшли ви чи ні, не намагаючись натиснути?
Відповіді:
Редагувати 2020 рік
Повертаючись до ( закритого ) випуску github , де зазначено, немає фактичного сеансу чи стану;
вхід докера фактично не створює будь-якого стійкого сеансу, він лише зберігає облікові дані користувача на диску, щоб, коли потрібна автентифікація, він міг прочитати їх для входу
Як зазначали інші, auths
у ~/.docker/config.json
файл додається запис / вузол (це також працює для приватних реєстрів) після успішного входу в систему:
{
"auths": {
"https://index.docker.io/v1/": {}
},
...
Після виходу з цього запису видаляється:
$ docker logout
Removing login credentials for https://index.docker.io/v1/
Вміст докера config.json
після:
{
"auths": {},
...
Цей файл можна проаналізувати за вашим сценарієм або кодом, щоб перевірити статус входу.
Ви можете увійти в докер 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): # <-- "myusername"
Для оригінального пояснення цього питання~/.docker/config.json
перевірте питання: як я можу дізнатися, чи я ввійшов у приватний реєстр докерів
~/.docker/config.json
.
docker info
мабуть, ненадійний навіть для index.docker.io . Наразі зареєстровано в порядку і бачити лише Registry
запис, ні Username
.
Для цієї перевірки я використовую один із наступних двох способів:
Якщо ви увійдете в систему "private.registry.com", ви побачите запис для такої ж, як наступний у ~/.docker/config.json
:
"auths": {
"private.registry.com": {
"auth": "gibberishgibberishgibberishgibberishgibberishgibberish"
}
}
Якщо ви намагаєтеся побачити, чи вже у вас активний сеанс на private.registry.com, спробуйте знову увійти:
bash$ docker login private.registry.com
Username (logged-in-user):
Якщо ви отримаєте такий результат, як зазначено вище, це означає, що з ним logged-in-user
вже був активний сеанс private.registry.com
. Якщо натомість буде запропоновано ввести ім'я користувача, це вказує на відсутність активного сеансу.
Ви можете виконати таку команду, щоб побачити ім'я користувача, з яким ви ввійшли в систему, та використаний реєстр:
docker system info | grep -E 'Username|Registry'
Тут відповіді поки не такі корисні:
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)
Для приватних реєстрів нічого не відображається в docker info
. Однак команда виходу повідомить, чи ви ввійшли:
$ docker logout private.example.com
Not logged in to private.example.com
(Хоча це змусить вас знову увійти.)
Схема облікових даних докер-клі не дивно проста, просто подивіться:
cat ~/.docker/config.json
{
"auths": {
"dockerregistry.myregistry.com": {},
"https://index.docker.io/v1/": {}
Це існує в Windows (використання Get-Content ~\.docker\config.json
), і ви також можете обміняти обліковий запис, який також містить ім'я користувача ... і я думаю, ви навіть можете отримати пароль
. "C:\Program Files\Docker\Docker\resources\bin\docker-credential-wincred.exe" list
{"https://index.docker.io/v1/":"kcd"}
docker-credential-wincred.exe <store|get|erase|list|version>
це означає, що ви можете отримати get
свій пароль
cat
псевдонім у Powershell ... оновлено, щоб включити і те, і інше
Принаймні, в "Docker для Windows" ви можете побачити, чи ви увійшли до док-центру через інтерфейс користувача. Просто клацніть правою кнопкою миші піктограму докера в області сповіщень Windows:
Якщо ви хочете просте true/false
значення, ви можете 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
jq
повернути правильний код виходу, і тоді вам не потрібно робити порівняння рядків:is_logged_in() { jq -e --arg url ${ADDRESS} '.auths | has($url)' ~/.docker/config.json > /dev/null; }; if is_logged_in; then ...
Використовуйте команду, як показано нижче:
docker info | grep 'name'
WARNING: No swap limit support
Username: <strong>jonasm2009</strong>
У 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"
}
Як вказував @Christian, найкраще спробувати спершу операцію, а потім увійти лише за потреби. Проблема полягає в тому, що "при необхідності" це не так очевидно, щоб зробити це надійно. Один із підходів полягає в порівнянні більш жорсткого рівня операції докера з деякими відомими рядками (методом проб і помилок). Наприклад,
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!