How can I tell whether or not I'm logged in to a private Docker registry server from a script? In other words, has docker login some.registry.com
been run successfully?
Note: I'm asking about an arbitrary private registry, not the docker.io
registry.
if docker login worked, you will find a .docker
folder on your home directory (~/.docker/
), with a config.json
file with credentials in it.
otherwise you would get an error login in.
Note: docker determine what credentials to use by looking at the registry name:
if you do
docker pull myregistry.com/myimage:tag
docker will look if you're logged in, and if not will check if you have the credentials for the registry myregistry.com
and login with those.
If not you will get a permission error
This is a bit hacky, but it works in most of the cases for me:
if ! grep -q "my.private.registry.com" ~/.docker/config.json ; then
docker login "my.private.registry.com"
fi
Basically, you search if there is a record of "my.private.registry.com" in ~/.docker/config.json
. However, if the session is expired, this check won't catch it.
When you do the
Docker login <private registry> -u <user> -p <password>
command from your terminal, you will have a response: (stored in $?)
0
Login Succeeded
if you were successful.
In your shell script, you could just look at the response you're receiving, if it does not equal 0, you've failed to login.
sudo docker login <registry> -u <uname> -p <password>
if [ $? -ne 0 ]; then
echo Login failed!
else
echo Login OK!
fi