कैसे पता करें कि docker पहले से docker रजिस्ट्री सर्वर में लॉग इन है


116

मुझे यकीन नहीं है कि मैं पहले से ही cmd का उपयोग करके cmd लाइन में docker रजिस्ट्री में लॉग इन कर चुका हूं: docker login। कैसे आप परीक्षण कर सकते हैं या देख सकते हैं कि आप पुश करने की कोशिश किए बिना लॉग इन हैं या नहीं?


यकीन नहीं होता कि मैं आपका सवाल समझ गया हूँ? क्या आप जानना चाहते हैं कि क्या आप एक टर्मिनल पर लॉग इन हैं? टर्मिनल में % डॉकटर इमेज कमांड क्यों नहीं चलाएं और देखें कि क्या आपकी छवियां दिखाई देती हैं?
noobuntu

1
मैं जानना चाहता हूं कि क्या मैं टर्मिनल में डॉकटर रजिस्ट्री में लॉग इन हूं या नहीं। मुझे लगा कि चित्र स्थानीय हैं, इसलिए यह केवल स्थानीय छवियों को दिखाएगा, न कि डॉकहब छवियों को।
विले मीक्क-ओजा

1
मेरा मानना ​​है कि एक बार जब आप docker में लॉग इन हो जाते हैं, तो आप अपने dockerhub रजिस्ट्री से जुड़ जाते हैं। मुझे नहीं लगता कि
noobuntu

जवाबों:


64

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, प्रश्न की जांच करें : मैं कैसे बता सकता हूं कि क्या मैं निजी डॉकटर रजिस्ट्री में लॉग इन हूं


4
अंतिम लिंक की सामग्री की जाँच करने के बारे में बात करता है ~/.docker/config.json
डुसान

2
docker infoindex.docker.io के लिए भी स्पष्ट रूप से अविश्वसनीय है । वर्तमान में ठीक से लॉग इन किया है और केवल Registryप्रविष्टि देखें , नहीं Username
प्रसिद्धगर्किन

3
docker की जानकारी अब यूजरनेम नहीं दिखा रही है। मैं विंडोज पर हूं, डॉक वर्जन 18.05.0-सीई के साथ।
जियोवानी बस्सी

3
क्या होगा अगर एक स्क्रिप्ट की जाँच करने की आवश्यकता है?
टेकीन

यह केवल मुख्य docker हब के लिए काम करता है, मुझे लगता है। किसी भी अन्य रेपो के लिए आपको अपनी config.json फ़ाइल की जाँच करनी होगी।
डुआने

43

मैं इस जाँच के लिए निम्नलिखित दो तरीकों में से एक का उपयोग करता हूँ:

1: config.json फ़ाइल देखें:

यदि आप "Private.registry.com" में लॉग इन हैं, तो आपको निम्नलिखित के लिए एक प्रविष्टि दिखाई देगी ~/.docker/config.json:

"auths": {
    "private.registry.com": {
        "auth": "gibberishgibberishgibberishgibberishgibberishgibberish"
    }
 }

2: एक बार फिर से लॉगिन करने की कोशिश करें:

यदि आप यह देखने का प्रयास कर रहे हैं कि क्या आपके पास पहले से ही Private.registry.com के साथ एक सक्रिय सत्र है, तो फिर से लॉगिन करने का प्रयास करें:

bash$ docker login private.registry.com
Username (logged-in-user):

यदि आपको उपरोक्त जैसा कोई आउटपुट मिलता है, तो इसका मतलब है कि logged-in-userपहले से ही एक सक्रिय सत्र था private.registry.com। यदि आपको इसके बजाय केवल उपयोगकर्ता नाम के लिए संकेत दिया जाता है, तो यह इंगित करेगा कि कोई सक्रिय सत्र नहीं है।


13

आपके द्वारा उपयोग किए गए उपयोगकर्ता नाम और रजिस्ट्री का उपयोग करने के लिए आप निम्न कमांड कर सकते हैं:

docker system info | grep -E 'Username|Registry'

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)

यह अब तक का सबसे अच्छा स्ट्रैटिजी है: बस एक पुल का प्रयास करें, अगर यह विफल हो जाता है तो यह लॉग इन नहीं होता है (आपके पास शेष लॉजिक प्रत्येक उपयोग के मामले पर निर्भर करेगा, लेकिन पहली कोशिश सार्वभौमिक रूप से लागू होती है)।
ओलिवर

2
हालाँकि किसी ने github.com/moby/moby/issues/15466 पर बताया कि असफलता के कई कारण हैं, न कि केवल लॉगिन समस्या, फिर भी docker से बाहर निकलने की स्थिति विफलता के कारण को अलग करने की अनुमति नहीं देती है। यह अभी भी अन्य समाधानों की तुलना में बेहतर है, लेकिन एक पूर्ण समाधान के लिए डॉकटर को पैच की आवश्यकता होगी।
ओलिवर

5

निजी रजिस्ट्रियों के लिए, कुछ भी नहीं दिखाया गया है docker info। हालाँकि, लॉगआउट कमांड आपको बताएगा कि क्या आप लॉग इन थे:

 $ docker logout private.example.com
 Not logged in to private.example.com

(हालांकि यह आपको फिर से लॉग इन करने के लिए मजबूर करेगा।)


5

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"}

खिड़कियों पर आप केवल उपयोगकर्ता नाम देख सकते हैं, पासवर्ड क्रेडेंशियल मैनेजर (कंट्रोल पैनल) में संग्रहीत है
Thorbjørn Ravn Andersen

मुझे लगता है कि मैं आश्चर्य को खराब कर दूंगा ... docker-credential-wincred.exe <store|get|erase|list|version>जिसका अर्थ है कि आप getअपना पासवर्ड
KCD

उस बिल्ली कमांड को लिनक्स पथ विभाजकों का उपयोग करना चाहिए: बिल्ली ~ /। डॉकर / config.json। यह कुछ के लिए एक नाइट-पिक लग सकता है, लेकिन अन्य पाठक इसे कॉपी / पेस्ट कर सकते हैं और इसे आज़मा सकते हैं, और आसानी से महसूस नहीं करते हैं कि "ऐसी कोई फ़ाइल या निर्देशिका" त्रुटि इसके कारण नहीं है। :-)
चार्ली

@charliearehart आप मेरे आलस्य को कम आंकें, मैं पॉवरशेल में catउपनाम का उपयोग कर रहा था ... दोनों को शामिल करने के लिए अपडेट किया गया
KCD

@ केसीडी, आह। :-) स्पष्टीकरण देने के लिए धन्यवाद।
चार्ली 14

4

बस जाँच की जाती है, आज यह इस तरह दिखता है:

$ docker login
Authenticating with existing credentials...
Login Succeeded

ध्यान दें: यह डॉकर CE के नवीनतम संस्करण के साथ एक macOS पर है, docker-क्रेडेंशियल-हेल्पर - दोनों को Rbrew के साथ स्थापित किया गया है।


3

कम से कम "विंडोज के लिए डॉकर" में आप देख सकते हैं कि क्या आप यूआई पर डॉकटर हब में लॉग इन हैं। बस विंडो अधिसूचना क्षेत्र में docker आइकन पर राइट क्लिक करें: Docker ने लॉगिन किया


1
GUI के बिना docker संस्करणों के बारे में क्या? या गैर-विंडोज?
ज़मीर फौज़न

1
फिर आपको अन्य उत्तरों में से एक दृष्टिकोण का उपयोग करना होगा।
बलुज्र

2

यदि आप एक साधारण 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

2
आपके पास jqएक उचित निकास कोड हो सकता है और फिर आपको स्ट्रिंग तुलना करने की आवश्यकता नहीं है:is_logged_in() { jq -e --arg url ${ADDRESS} '.auths | has($url)' ~/.docker/config.json > /dev/null; }; if is_logged_in; then ...
Guss

अच्छा! धन्यवाद!
एमसीडब्ल्यू

1

नीचे की तरह कमांड का उपयोग करें:

docker info | grep 'name'

WARNING: No swap limit support
Username: <strong>jonasm2009</strong>

यदि आप पहले से ही डॉकटर रजिस्ट्री में लॉग इन हैं, तो उपयोग करें ! [यहाँ चित्र विवरण दर्ज करें ] ( i.stack.imgur.com/JkCxn.png ) आपको उत्तर दिखाई देगा।
मेंग जोनास

1

खिड़कियों पर आप इस फ़ाइल को देखकर लॉगिन "प्राधिकरणों" (ज़ोर) का निरीक्षण कर सकते हैं: [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"
}

0

जैसा कि @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!
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.