gitlab-ci: Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?

I’m installing a personal runner for my projects.

sudo docker run --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register    --non-interactive    --executor "docker"    --docker-image docker:stable    --url "https://gitlab.com"    --registration-token "my-token" 
--description "docker-runner privileged"    --tag-list "docker,aws, gara"    --run-untagged="true"    --locked="false"   
--access-level="not_protected"    --docker-privileged

with this runner i can successfully the step test, build and analysis of my maven projet.

For step docker build, I always have:

Cannot connect to the Docker daemon at tcp://docker:2375. Is the
docker daemon running? ERROR: Job failed: exit code 1

Full log:

Running with gitlab-runner 13.1.1 (6fbc7474) on docker-runner
privileged GYDNagVx Preparing the "docker" executor 00:21 Using Docker
executor with image docker:latest … Starting service docker:dind …
Pulling docker image docker:dind … Using docker image
sha256:b3893e48cf281b58a763fb90904fd5d63595f9e5ae5736ee2d892a2dea6a371a
for docker:dind … Waiting for services to be up and running…
Pulling docker image docker:latest … Using docker image
sha256:809cc4dba987efb4641d5b6fef38f47abcde1bc5c5e9850616f0ed3552737e8c
for docker:latest … Preparing environment 00:04 Running on
runner-gydnagvx-project-15477556-concurrent-0 via e59663817b22…
Getting source from Git repository 00:07 Fetching changes with git
depth set to 50… Reinitialized existing Git repository in
/builds/gara-project/back-end-micro-services/msearch/.git/ Checking
out 80fcdd6e as develop… Removing target/ Skipping Git submodules
setup Downloading artifacts 00:18 Downloading artifacts for
maven-build (788252737)… Downloading artifacts from coordinator…
ok id=788252737 responseStatus=200 OK token=jjUorX2D Executing
"step_script" stage of the job script 00:27 $ docker login -u
"${registry_user}" -p "${registry_pass}" "${registry_url}" WARNING!
Using –password via the CLI is insecure. Use –password-stdin.
WARNING! Your password will be stored unencrypted in
/root/.docker/config.json. Configure a credential helper to remove
this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded $ docker build -t
"${registry_url}/${image_name}:${image_tag}" . Cannot connect to the
Docker daemon at tcp://docker:2375. Is the docker daemon running?
ERROR: Job failed: exit code 1

It seems to be a common error but none of solutions found over internet works for me.
My gitla-ci.yml file:

include:
  - local: '/templates/.gitlab-ci-common-template.yml'

variables:
  SPRING_PROFILES_ACTIVE: test
  MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
  DOCKER_TLS_CERTDIR: ""

default:
  image: maven:3.6.3-jdk-8-slim
  cache:
    key: "$CI_COMMIT_REF_NAME"
    paths:
      - .m2/repository/
      - target/

stages:
    - test
    - build
    - analysis
    - docker
    - scan
    - deploy
    - delivery

maven-test:
  stage: test
  extends:
    - .ci_only
    - .skip_build
  script:
  - mvn test
  artifacts:
    reports:
      junit:
        - target/surefire-reports/TEST-*.xml

maven-build:
  stage: build
  extends:
    - .ci_only
    - .skip_build
  script:
    - "./mvnw -Pint clean install -DskipTests=true"
  artifacts:
    paths:
      - target/*
    expire_in: 1 week

docker-build:
  image: docker:latest
  services:
    - docker:19.03.0-dind
  cache: {}
  before_script:
    - docker login -u "${registry_user}" -p "${registry_pass}" "${registry_url}"
  stage: docker
  dependencies:
    - maven-build
  extends:
    - .skip_build
    - .ci_only
  script:
    - docker build -t "${registry_url}/${image_name}:${image_tag}" .
    - docker run -d --name ${image_tag} "${registry_url}/${image_name}:${image_tag}"
    - sleep 60 && docker ps && docker logs ${image_tag}
    - if [ $(docker inspect -f '{{.State.Running}}' ${image_tag}) = "true" ]; then echo "Application well started"; else exit 1; fi
    - docker rm -f ${image_tag}
    - docker push "${registry_url}/${image_name}:${image_tag}"

docker_release_image:
  image: docker:latest
  stage: delivery
  before_script:
    - docker login -u "${registry_user}" -p "${registry_pass}" "${registry_url}"
#    - docker login -u "${registry_prod_user}" -p "${registry_prod_pass}" "${registry_prod_url}"
  services:
    - docker:19.03.0-dind
  script:
    - docker pull "${registry_url}/${image_name}:${image_tag}"
    - docker tag "${registry_url}/${image_name}:${image_tag}" "${registry_url}/${image_name}:${CI_COMMIT_TAG/*v/}"
    - docker tag "${registry_url}/${image_name}:${image_tag}" "${registry_url}/${image_name}:latest"
#    - docker tag "${registry_url}/${image_name}:${image_tag}" "${registry_prod_url}/${image_name}:${CI_COMMIT_TAG/*v/}"
    - docker push "${registry_url}/${image_name}:${CI_COMMIT_TAG/*v/}"
    - docker push "${registry_url}/${image_name}:latest"
#    - docker push "${registry_prod_url}/${image_name}:${CI_COMMIT_TAG/*v/}"
    - docker rmi "${registry_url}/${image_name}:${image_tag}"
  when: manual
  extends:
    - .only_tag_on_master

Please how could I correct it ?
Thanks

Source: Docker Questions