Cannot connect to the Docker daemon on bash on Ubu

2019-03-22 21:44发布

I am able to install docker, docker-compose and docker-machine

However when I try to run

root@DESKTOP-51NFMIM:~# docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Is there any suggestion for solving this problem?

2条回答
唯我独甜
2楼-- · 2019-03-22 22:28

Note: if you are using the Ubuntu from WSL (Windows Subsystem for Linux), do understand that the docker client is working, not the docker server (daemon).

See Microsoft/WSL issue 2114 and this thread.

For the server, you would still need to use only Docker for Windows and its Hyper-V VM.

Then, Microsoft/WSL issue 2102 adds:

I was able to make TLS work from inside WSL by changing DOCKER_CERT_PATH environment variable (which I got from running eval $(docker-machine.exe env --shell bash)) from "C:\C:\Users\mmarchini\.docker\machine\machines\default" to "/mnt/c/Users/mmarchini/.docker/machine/machines/default/" .
At least docker build seems to be working now, I'll try using docker-compose later.

See this script (from Matheus Marchini) to launch a docker-machine bash with the right setting:

#!/usr/bin/env python3

from subprocess import run, PIPE

completed_process = run(["docker-machine.exe", "env", "--shell", "bash"], stdout=PIPE)

docker_env = completed_process.stdout.decode("ascii")

for line in docker_env.split("\n"):
    if "DOCKER_CERT_PATH" in line:
        env_var, path, _ = line.split('"')
        path = path.replace("\\", "/")
        drive, path = path.split(":", 1)
        path = "/mnt/{}{}".format(drive.lower(), path)
        line = '{}"{}"'.format(env_var, path)
print(line)
查看更多
疯言疯语
3楼-- · 2019-03-22 22:31

Found the solution on this post: https://blog.jayway.com/2017/04/19/running-docker-on-bash-on-windows/

Running docker against an engine on a different machine is actually quite easy, as Docker can expose a TCP endpoint which the CLI can attach to.

This TCP endpoint is turned off by default; to activate it, right-click the Docker icon in your taskbar and choose Settings, and tick the box next to “Expose daemon on tcp://localhost:2375 without TLS”.

With that done, all we need to do is instruct the CLI under Bash to connect to the engine running under Windows instead of to the non-existing engine running under Bash, like this:

$ docker -H tcp://0.0.0.0:2375 images

There are two ways to make this permanent – either add an alias for the above command or export an environment variable which instructs Docker where to find the host engine (NOTE: make sure to use single apostrophe's below):

$ echo "export DOCKER_HOST='tcp://0.0.0.0:2375'" >> ~/.bashrc
$ source ~/.bashrc

Now, running docker commands from Bash works just like they’re supposed to.

$ docker run hello-world

Successful response:

Hello from Docker!This message shows that your installation appears to be working correctly.
查看更多
登录 后发表回答