Loading...

How to fix 'Cannot connect to the docker daemon'

Jonas Scholz
4 min read 25. Jan. 2025

If you're seeing the error "Cannot connect to the Docker daemon," it means there's a hiccup between your Docker client and the Docker daemon. Let's walk through some steps to fix this issue.

Step 1: Check if the Docker Daemon is Running

First off, you need to see if the Docker daemon is up and running. You can do this in a few ways, depending on your operating system.

  • Using Docker Command: Open your terminal and type docker info. If Docker is running, this command will give you some information about your Docker setup. If it's not running, you'll get an error message saying it can't connect to the daemon.
  • Using System Utilities: On systems like Linux, you can use commands like sudo systemctl is-active docker or sudo service docker status to check if Docker is active. On Windows, you might need to check the service status through the Task Manager or Services app.
  • Checking Process List: You can also look for the dockerd process in your system's process list using commands like ps aux | grep dockerd on Linux or tasklist | findstr dockerd on Windows.

If the Docker daemon isn't running, start it. On Linux, you might use sudo systemctl start docker or sudo service docker start. On Windows, you can start it from the Services app. Usually you can also simply start it by starting Docker Desktop.

Step 2: Check Your Docker Client's Connection Host

The Docker client might be trying to connect to a Docker daemon on a different host. Check the DOCKER_HOST environment variable to see where your client is trying to connect.

  • Check DOCKER_HOST: Run echo $DOCKER_HOST in your terminal. If it returns a value, your client is set to connect to that host. If it's empty, it's set to connect locally.
  • Unset DOCKER_HOST if Incorrect: If DOCKER_HOST is set but incorrect, you can unset it with unset DOCKER_HOST in your terminal. If it's set in files like ~/.bashrc or ~/.profile, you'll need to edit those files to remove the setting.
  • Verify Remote Host Connection: If DOCKER_HOST is set correctly but you still can't connect, make sure the Docker daemon is running on the remote host and that there aren't any network issues or firewalls blocking the connection.

Step 3: Troubleshoot Configuration Conflicts

Sometimes, the Docker daemon might not start due to conflicts between the daemon.json configuration file and startup scripts or command-line flags.

  • Check daemon.json and Startup Scripts: If you're using daemon.json and also starting Docker with command-line flags, make sure these don't conflict. For example, if daemon.json specifies a hosts setting and you're also using a -H flag when starting Docker, this can cause issues.
  • Adjusting Configurations: If you find a conflict, you'll need to adjust either your daemon.json or the flags you use when starting Docker. For example, if you're specifying a hosts entry in daemon.json, make sure you're not also using the -H flag when starting Docker.
  • Configuring Systemd: On Debian and Ubuntu systems using systemd, if you want to change the daemon's listening address, you might need to create a file at /etc/systemd/system/docker.service.d/docker.conf to override the default -H flag. After making changes, run sudo systemctl daemon-reload and try starting Docker again.

Step 4: Address Out of Memory Issues

If your system runs out of memory, Docker might not connect properly. Ensure your host has enough memory for your containers.

  • Check Memory Usage: Use commands like free -h on Linux to check your system's memory usage. If you're running low, consider adding more memory or reducing the memory demands of your containers.
  • Understand Memory Constraints: Read up on Docker's documentation about managing memory constraints to prevent out-of-memory situations.

Step 5: Verify Kernel Compatibility

Docker requires a compatible kernel to run. Make sure your system's kernel is at least version 3.10 and has the necessary modules.

  • Check Kernel Version: Run uname -r to see your kernel version. If it's older than 3.10, you'll need to update.
  • Check Kernel Modules: You can use a script like check-config.sh from Docker's GitHub repository to check if your kernel has the necessary modules. This script is for Linux only.

Step 6: Address DNS Resolver Issues

Sometimes, DNS resolver issues can prevent Docker from connecting to the daemon.

  • Check for dnsmasq: If you're using a desktop environment with a network manager that uses dnsmasq, it might interfere with Docker's DNS resolution. Check if dnsmasq is running by looking at /etc/resolv.conf.
  • Specify DNS Servers: You can specify DNS servers in Docker's daemon.json file to ensure Docker uses the correct DNS servers. Add a dns key with the IP addresses of the DNS servers you want to use.
  • Turn off dnsmasq: If you prefer, you can turn off dnsmasq by editing the /etc/NetworkManager/NetworkManager.conf file and commenting out the dns=dnsmasq line, then restarting NetworkManager and Docker.

By following these steps, you should be able to resolve the "Cannot connect to the Docker daemon" error. Remember, the key is to check if the daemon is running, ensure your client is connecting to the right host, resolve any configuration conflicts, manage memory effectively, ensure kernel compatibility, and address any DNS issues.

Welcome to the container cloud

Sliplane makes it simple to deploy containers in the cloud and scale up as you grow. Try it now and get started in minutes!