How to know if docker is already logged in to a docker registry server

后端 未结 13 2474
后悔当初
后悔当初 2020-12-23 02:49

I\'m not sure if I have already logged in to a docker registry in cmd line by using cmd: docker login. How can you test or see whether you are logged in or not, without tryi

相关标签:
13条回答
  • 2020-12-23 03:00

    The docker cli credential scheme is unsurprisingly uncomplicated, just take a look:

    cat ~/.docker/config.json

    {
      "auths": {
        "dockerregistry.myregistry.com": {},
        "https://index.docker.io/v1/": {}
    

    This exists on Windows (use Get-Content ~\.docker\config.json) and you can also poke around the credential tool which also lists the username ... and I think you can even retrieve the password

    . "C:\Program Files\Docker\Docker\resources\bin\docker-credential-wincred.exe" list

    {"https://index.docker.io/v1/":"kcd"}
    
    0 讨论(0)
  • 2020-12-23 03:00

    At least in "Docker for Windows" you can see if you are logged in to docker hub over the UI. Just right click the docker icon in the windows notification area:

    0 讨论(0)
  • 2020-12-23 03:03

    As pointed out by @Christian, best to try operation first then login only if necessary. Problem is that "if necessary" is not that obvious to do robustly. One approach is to compare the stderr of the docker operation with some strings that are known (by trial and error). For example,

    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!
    
    0 讨论(0)
  • 2020-12-23 03:04

    My AWS ECR build-script has:

    ECR_HOSTNAME="${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com"
    TOKEN=$(jq -r '.auths["'$ECR_HOSTNAME'"]["auth"]' ~/.docker/config.json)
    curl --fail --header "Authorization: Basic $TOKEN" https://$ECR_HOSTNAME/v2/
    

    If accessing ECR fails, a login is done:

    aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin https://$ECR_HOSTNAME
    

    For this to work, a proper Docker credential store cannot be used. Default credentials store of ~/.docker/config.json is assumed.

    0 讨论(0)
  • 2020-12-23 03:05

    You can do the following command to see the username you are logged in with and the registry used:

    docker system info | grep -E 'Username|Registry'
    
    0 讨论(0)
  • 2020-12-23 03:10

    If you want a simple true/false value, you can pipe your docker.json to 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
    
    0 讨论(0)
提交回复
热议问题