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

后端 未结 13 2476
后悔当初
后悔当初 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:10

    Use command like below:

    docker info | grep 'name'
    
    WARNING: No swap limit support
    Username: <strong>jonasm2009</strong>
    
    0 讨论(0)
  • 2020-12-23 03:19

    Edit 2020

    Referring back to the (closed) github issue, where it is pointed out, there is no actual session or state;

    docker login actually isn't creating any sort of persistent session, it is only storing the user's credentials on disk so that when authentication is required it can read them to login

    As others have pointed out, an auths entry/node is added to the ~/.docker/config.json file (this also works for private registries) after you succesfully login:

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

    When logging out, this entry is then removed:

    $ docker logout
    Removing login credentials for https://index.docker.io/v1/
    

    Content of docker config.json after:

    {
        "auths": {},
        ...
    

    This file can be parsed by your script or code to check your login status.

    Alternative method (re-login)

    You can login to docker with 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:
    

    If you are already logged in, the prompt will look like:

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

    For the original explanation for the ~/.docker/config.json, check question: how can I tell if I'm logged into a private docker registry

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

    The answers here so far are not so useful:

    • docker info no longer provides this info
    • docker logout is a major inconvenience - unless you already know the credentials and can easily re-login
    • docker login response seems quite unreliable and not so easy to parse by the program

    My solution that worked for me builds on @noobuntu's comment: I figured that if I already known the image that I want to pull, but I'm not sure if the user is already logged in, I can do this:

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

    For private registries, nothing is shown in docker info. However, the logout command will tell you if you were logged in:

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

    (Though this will force you to log in again.)

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

    Just checked, today it looks like this:

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

    NOTE: this is on a macOS with the latest version of Docker CE, docker-credential-helper - both installed with homebrew.

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

    I use one of the following two ways for this check:

    1: View config.json file:

    In case you are logged in to "private.registry.com" you will see an entry for the same as following in ~/.docker/config.json:

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

    2: Try docker login once again:

    If you are trying to see if you already have an active session with private.registry.com, try to login again:

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

    If you get an output like the above, it means logged-in-user already had an active session with private.registry.com. If you are just prompted for username instead, that would indicate that there's no active session.

    0 讨论(0)
提交回复
热议问题