Docker login fails

Hello, I am new on gitlab.com and I want to use GitLab CI to build, push and deploy docker images.
I do use it proficiently at work already, but it’s self-hosted and I reckon there are some differences.

Anyhow, the issue is when I try to login to the registry, I usually do this:

docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY

But it gives:

 Error response from daemon: Client sent an HTTP request to an HTTPS server.

I have tried to replace it with the following:

docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY

But nothing changes (ofc).

So, I’ve been digging SO, Google, and these are the configurations I have tried:

  # 1) Removing certificates (force http, i guess):
  DOCKER_HOST: tcp://docker:2375 # also tried 2376
  DOCKER_TLS_CERTDIR: ""
  # 2) Adding `overlay2` fs driver
  DOCKER_TLS_CERTDIR: ""
  DOCKER_HOST: tcp://docker:2375/ # also tried 2376
  DOCKER_DRIVER: overlay2
  # 3) Same but with certificates
  DOCKER_HOST: tcp://docker:2376 
  DOCKER_TLS_CERTDIR: "/certs" #also tried with empty string
  DOCKER_DRIVER: overlay2
  # 4) Same but without host
  DOCKER_TLS_CERTDIR: "/certs" #also tried with empty string
  DOCKER_DRIVER: overlay2

Only “progress” I made is that solution #4, which produced:

error during connect: Post https://X.X.X.X/v1.40/auth: x509: certificate signed by unknown authority

So looks like I can’t connect to the registry. I’m kind of lost…
I would expect the official guide to work out of the box, and I don’t think I am doing anything fancy.

This is my .gitlab-ci.yml:

stages:
  - build
  # ...

# Also tried:
#services:
#  - docker:19.03.1-dind


build:
  stage: build
  image: docker:stable # or docker/compose:stable
  # Also tried:
  #services:
  #  - docker:dind

  variables:
    # ... as seen above
  before_script:
    # this fails :(
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    - #... build command never reached
  only:
    - master
    - beta

Probably it’s just something small I have been missing, or pheraps not.

Bespoke help would be golden, but I can settle for a link to a “How to docker login in GitLab CI” guide which works on current version of gitlab.com

1 Like

In case you’re still having this issue, you can use the DOCKER_AUTH_CONFIG environment variable instead of running docker login command. This variable should contain a list of docker registries and the authentication token for each registry, as shown in the sample below.

{
	"auths": {
		"hostname:port": {
			"auth": "<TOKEN>"
		}
	}
}

PS. The <TOKEN> should be replaced with username:password encoded as base64. You can get it using the command below:

echo -n username:password | base64