WSL and Docker for Windows: "Cannot connect to the Docker daemon at tcp://localhost:2375. Is the docker daemon running?"

Wow! I ran this command in Ubuntu WSL :man_facepalming: and tried running docker ps, which didn’t work to my annoyment. If it wasn’t for @spottedmahn clarifying it to be run on the Windows side I would have throwed in the towel! I really have to give a lot of kudos to @nicodocoyo (for the solution), and @spottedmahn (for the clarification) for helping me figure this out!

Thank you nicodocoyo, this fixed the problem for me.

I just added the tcp://localhost:2375 to the root ~/.bashrc and it worked for me.

removing the variable worked for me aswell.

1 Like

Hi, I have been having this problem for days now and I am new to Docker.

I tried executing the docker-machine.exe create default, but it gives me this error:

'docker-machine.exe' is not recognized as an internal or external command,
operable program or batch file.

Thanks for the screenshots, I Had the same problem.

PSA for anyone scratching their heads at the conflicting instructions in this post, a lot depends on if you’re following instructions for WSL1 or WSL2. IF you are on WSL1 then the original suggestions around adding the DOCKER_HOST into your bashrc profile is required.

If you are on WSL2 then setting the DOCKER_HOST will break the default integration between docker and WSL, so Don’t do it.

1 Like

I hate it when shit doesn’t work out of the box. Especially when I just started my training and needed this for that. But you saved my day sir! It’s working now. Thanks a lot!

I have recently use this using Windows 10 Ubuntu 20.04 and Docker Desktop version 4.3.1
You may want try this old version Docker Desktop release notes | Docker Documentation

(1) Upgrade to the latest version did not work but I don’t know why and enable to expose 2375 on Docker Desktop for Windows settings

(2) You have to check whether interface portproxy was added

netsh interface portproxy show v4tov4

if not add this using PoerShell Admin rights

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2375 connectaddress=127.0.0.1 connectport=2375

(3) You have to enable windows firewall for protocol TCP and port 2375 as well.

Looks like we are so many with the same kind of issue. Personally, building under Docker Desktop either as individual docker build or docker compose worked ike a breeze. But the error popped out when trying to rebuild from gitlab pipelines and docker-in-docker configurations; got “is the docker daemon running?” after a claim regarding access to /var/run/docker.sock or tcp://localhost:2375 or also tcp://docker:2375 according to various trials…
Hence for those that land here from a gitlab runner context, the issue my come to an end provided you follow VERY carefully the instructions at https://docs.gitlab.com/ee/ci/docker/using_docker_build.html. Note that the single replacement of a version, like using docker:latest or docker:stable instead of e.g. docker:20.10.16 would defeat your configuration. The stuff is EXTREMELY brittle to any variation of a version or miss-taking the use of a “docker” or “kubernetes” executor (the latest being the only one available in RedHat openShift with the gitlab runner operator certified by RedHat and the one which I was able to get working).

In my case, the problem occurred after installing docker desktop. I couldn’t run docker on the terminal before starting docker desktop. Here is how to switch to docker context:
docker context use default
I’ve got it from here stack overflow - Docker not working without sudo in Ubuntu 22.04 - Stack Overflow

I’m running Windows 10 Ubuntu 20.04 and Docker Desktop v4.17.0. My got resolved by enabling Ubuntu under
Settings → Resources → WSL Integration.

2 Likes

Dear… Thank you! Awesome! This may create the following in a WSL machine:

user@hostname:~$ command -v docker;
/usr/bin/docker
user@hostname:~$ namei -xl -- '/usr/bin/docker';
f: /usr/bin/docker
Drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root bin
lrwxrwxrwx root root docker -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker
Drwxr-xr-x root root   /
drwxr-xr-x root root   mnt
Drwxrwxrwt root root   wsl
drwxr-xr-x root root   docker-desktop
Drwxr-xr-x root root   cli-tools
drwxr-xr-x root root   usr
drwxr-xr-x root root   bin
-rwxr-xr-x root root   docker

Just in case, the TCP 2375 Docker Desktop expose listens on 127.0.0.1 and hence may not be available inside a WSL machine.