docker login fails on a server with no X11 installed
DockerDocker RegistryUbuntu ServerDocker Problem Overview
I am trying to deploy a docker configuration with images on a private docker registry.
Now, every time I execute docker login registry.example.com
, I get the following error message:
> error getting credentials - err: exit status 1, out: Cannot autolaunch D-Bus without X11 $DISPLAY
The only solution I found for non-MacOS users was to run export $(dbus-launch)
first, but that did not change anything.
I am running Ubuntu Server and tried with both the Ubuntu Docker package and the Docker-CE package.
How can I log in without an X11 session?
Docker Solutions
Solution 1 - Docker
Looks like this is because it defaults to use the secretservice
executable which seems to have some sort of X11 dependency for some reason. If you install and configure pass
docker will use that instead which seems to solve the problem.
In a nutshell (from https://github.com/docker/compose/issues/6023)
sudo apt install gnupg2 pass
gpg2 --full-generate-key
This generates a you a gpg2 key. After that's done you can list it with
gpg2 -k
Copy the key id (from the line labelled [uid]
) and do
pass init "whatever key id you have"
Now docker login
should work.
There are a couple of bugs logged on launchpad regarding this:
https://bugs.launchpad.net/ubuntu/+source/docker-compose/+bug/1796119
Solution 2 - Docker
This works: sudo apt remove golang-docker-credential-helpers
Solution 3 - Docker
secretservice
requires a GUI. You can use pass
without a GUI.
Unfortunately, Docker's documentation on how to configure Docker Credential Helpers is quite lacking. Here's a comprehensive guide how to configure pass
with Docker (tested with Ubuntu 18.04):
pass
1. Install the Docker Credential Helper for - Find the url for the latest version of
docker-credential-pass
from https://github.com/docker/docker-credential-helpers/releases . For example:
# substitute with the latest version
url=https://github.com/docker/docker-credential-helpers/releases/download/v0.6.2/docker-credential-pass-v0.6.2-amd64.tar.gz
# download and untar the binary
wget $url
tar -xzvf $(basename $url)
# move the binary to a dir in your $PATH
sudo mv docker-credential-pass /usr/local/bin
# verify it works
docker-credential-pass list
pass
2. Install and configure apt install pass
# create a gpg2 key
gpg2 --gen-key
# if you have issues with lack of entropy, "apt install haveged" and try again
# create the password store using the gpg user id above
pass init $gpg_id
3. docker login
docker login
# You should not see any credentials stored in "auths" section.
# "credsStore": "pass" should have been automatically added.
# If the value is "secretservice", replace it with "pass".
cat ~/.docker/config.json
# verify credentials stored in `pass` store now
pass
Solution 4 - Docker
You can remove the offending package golang-docker-credential-helpers
without removing all of docker-compose
.
The following worked for me on a server without X11 installed:
dpkg -r --ignore-depends=golang-docker-credential-helpers golang-docker-credential-helpers
and then
echo 'foo' | docker login mydockerrepo.com -u dockeruser --password-stdin
Source:
bug reported in debian:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=910823#39
bug reported on ubuntu:
https://bugs.launchpad.net/ubuntu/+source/docker-compose/+bug/1796119
Solution 5 - Docker
There is a much easier answer than the ones already posted, which I found in a comment on https://github.com/docker/docker-credential-helpers/issues/105.
The solution is to rename docker-credential-secretservice out of the way
e.g: mv /usr/bin/docker-credential-secretservice /usr/bin/docker-credential-secretservice.broken
Once you do this, docker login works regardless of whether or not docker-compose is installed. No other package additions or removals are necessary.
Solution 6 - Docker
I've resolved this issue by uninstalling docker-compose
which was installed from Ubuntu repo and installing docker-compose
by official instruction at https://docs.docker.com/compose/install/#install-compose
Solution 7 - Docker
What helped me on Ubuntu 18.04 was:
-
Following the steps in @oberstet 's post and uninstalling the golang helper
-
Performing a login after the helper uninstall
-
Reinstalling docker via
sudo apt-get install docker
-
Logging back in via
sudo docker login