मुझे यकीन नहीं है कि मैं पहले से ही cmd का उपयोग करके cmd लाइन में docker रजिस्ट्री में लॉग इन कर चुका हूं: docker login। कैसे आप परीक्षण कर सकते हैं या देख सकते हैं कि आप पुश करने की कोशिश किए बिना लॉग इन हैं या नहीं?
मुझे यकीन नहीं है कि मैं पहले से ही cmd का उपयोग करके cmd लाइन में docker रजिस्ट्री में लॉग इन कर चुका हूं: docker login। कैसे आप परीक्षण कर सकते हैं या देख सकते हैं कि आप पुश करने की कोशिश किए बिना लॉग इन हैं या नहीं?
जवाबों:
2020 को संपादित करें
वापस ( बंद ) गितुब मुद्दे का जिक्र करते हुए , जहां इसे इंगित किया गया है, कोई वास्तविक सत्र या स्थिति नहीं है;
डॉक लॉगिन वास्तव में किसी भी प्रकार का लगातार सत्र नहीं बना रहा है, यह केवल डिस्क पर उपयोगकर्ता की साख को संग्रहीत कर रहा है ताकि जब प्रमाणीकरण की आवश्यकता हो तो इसे लॉगिन करने के लिए पढ़ सके
जैसा कि दूसरों ने बताया है, फ़ाइल में एक authsप्रविष्टि / नोड जोड़ा जाता है ~/.docker/config.json(यह निजी रजिस्ट्रियों के लिए भी काम करता है ) आपके द्वारा सफलतापूर्वक स्वीकार किए जाने के बाद:
{
"auths": {
"https://index.docker.io/v1/": {}
},
...
लॉग आउट करते समय, यह प्रविष्टि तब हटा दी जाती है:
$ docker logout
Removing login credentials for https://index.docker.io/v1/
के config.jsonबाद docker की सामग्री :
{
"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 infoindex.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
(हालांकि यह आपको फिर से लॉग इन करने के लिए मजबूर करेगा।)
Docker cli क्रेडेंशियल स्कीम बिना सोचे-समझे सरलता से लागू हो जाती है, बस एक नज़र डालें:
cat ~/.docker/config.json
{
"auths": {
"dockerregistry.myregistry.com": {},
"https://index.docker.io/v1/": {}
यह विंडोज (उपयोग 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उपनाम का उपयोग कर रहा था ... दोनों को शामिल करने के लिए अपडेट किया गया
कम से कम "विंडोज के लिए डॉकर" में आप देख सकते हैं कि क्या आप यूआई पर डॉकटर हब में लॉग इन हैं। बस विंडो अधिसूचना क्षेत्र में docker आइकन पर राइट क्लिक करें:

यदि आप एक साधारण 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>
खिड़कियों पर आप इस फ़ाइल को देखकर लॉगिन "प्राधिकरणों" (ज़ोर) का निरीक्षण कर सकते हैं: [USER_HOMEDDIR] .docker \ config.json।
उदाहरण: c: \ USERS \ your_USERANME.docker \ config.json
यह विंडोज़ साख के लिए कुछ इस तरह दिखेगा
{
"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!