Skip to main content

What are "cannot connect to the Docker daemon" errors in GitLab CI/CD pipelines and how do I fix them?

GitLab CI/CD pipelines may encounter "Cannot connect to the Docker daemon" errors for a number of causes, including improper Docker configuration, erroneous permissions, or network problems.

Possible Causes and Solutions

1. Docker Daemon Not Running

Ensure that the Docker daemon is running on the machine where the GitLab Runner is installed. You can start the Docker daemon using the following command:

sudo systemctl start docker

2. Insufficient Permissions

The user running the GitLab Runner may not have the necessary permissions to access the Docker daemon. Add the user to the docker group to grant the required permissions:

sudo usermod -aG docker $(whoami)

Log out and log back in for the changes to take effect.

3. Docker Daemon Configuration

If the Docker daemon is listening on a TCP port, ensure that the machine where the GitLab Runner is installed can reach this port. Check for any firewall settings or network issues that might be preventing the GitLab Runner from connecting to the Docker daemon over TCP.

To verify if the Docker daemon is listening on a TCP port, use the following command:

sudo netstat -tlnp | grep docker

If the Docker daemon is not listening on a TCP port, check the Docker daemon configuration file (usually located at /etc/docker/daemon.json) to ensure that the hosts parameter is set correctly.

Example daemon.json configuration:

{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}

Restart the Docker daemon to apply the changes:

sudo systemctl restart docker

4. Docker-in-Docker (DinD) Configuration

If you are using Docker-in-Docker (DinD) in your GitLab CI/CD pipeline, ensure that the DinD service is correctly configured. Add the docker service to your .gitlab-ci.yml file and specify the Docker socket:

image: docker:latest

services:
- docker:dind

variables:
DOCKER_HOST: tcp://docker:2375/

before_script:
- docker info

5. Network Configuration

Ensure that there are no network restrictions or firewalls blocking the connection between the GitLab Runner and the Docker daemon. You may need to configure your network settings or update your firewall rules to allow the connection.

Summary

By addressing these common issues, you can resolve "cannot connect to the Docker daemon" errors and ensure that your GitLab CI/CD pipelines run smoothly. Verify that the Docker daemon is running, check user permissions, review Docker daemon and DinD configurations, and ensure there are no network restrictions preventing the connection.