无法在Ubuntu窗口上的bash上连接到Docker守护程序

zsb*_*ppa 32 bash docker windows-subsystem-for-linux

我能够安装docker,docker-compose和docker-machine

但是,当我试图跑

root@DESKTOP-51NFMIM:~# docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Run Code Online (Sandbox Code Playgroud)

有什么建议可以解决这个问题吗?

Ram*_*ine 31

在这篇文章中找到了解决方案:https://blog.jayway.com/2017/04/19/running-docker-on-bash-on-windows/

在另一台机器上对引擎运行docker实际上非常简单,因为Docker可以公开CLI可以附加到的TCP端点.

默认情况下,此TCP端点处于关闭状态; 要激活它,请右键单击任务栏中的Docker图标,然后选择"设置",并勾选"在tcp上展开守护程序:// localhost:2375,不使用TLS"旁边的框.

完成后,我们需要做的就是指示Bash下的CLI连接到在Windows下运行的引擎,而不是连接到在Bash下运行的不存在的引擎,如下所示:

$ docker -H tcp://0.0.0.0:2375 images
Run Code Online (Sandbox Code Playgroud)

有两种方法可以使这个永久化 - 为上面的命令添加别名或导出一个环境变量,指示Docker在哪里找到主机引擎(注意:确保使用下面的单个撇号):

$ echo "export DOCKER_HOST='tcp://0.0.0.0:2375'" >> ~/.bashrc
$ source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

现在,从Bash运行docker命令就像他们应该的那样工作.

$ docker run hello-world
Run Code Online (Sandbox Code Playgroud)

成功回复:

Hello from Docker!This message shows that your installation appears to be working correctly.
Run Code Online (Sandbox Code Playgroud)

  • 50 个无用的 StackOverflow 稍后“回答”,而这个实际上解决了我的问题。不知道 docker windows 应用程序中的设置甚至在那里。感谢您的回答! (3认同)

Md.*_*yan 9

对我来说,这适用于 Windows 的 WSL:

  • 1>转到:打开或关闭Windows功能
  • 2> 取消选择“Hyper-V”,重新启动,
  • 3> 再次转到“打开或关闭 Windows 功能”,
  • 4> 再次选择“Hyper-V”
  • 并重新启动最后一次。之后 docker 又可以访问了。

假设您已经为 Windows 安装了 docker 桌面,并且在没有 TLS 的情况下勾选了 tcp://localhost:2375 上的 Settings->General->Expose daemon


Ste*_*han 6

如果您正在运行Windows 10版本1803或更高版本,则现在可以在没有Docker Desktop for Windows的情况下在WSL中完全安装并运行Docker客户端和服务器。我在以下WSL上工作:

OS: Ubuntu 18.04 bionic [Ubuntu on Windows 10]
Kernel: x86_64 Linux 4.4.0-17763-Microsoft
Run Code Online (Sandbox Code Playgroud)

只需按照相同的说明在Ubuntu上进行安装,但请确保选择要安装的特定版本。目前,版本18.06.1〜ce〜3-0〜ubuntu可以正常工作,但更高版本的5:18.09.6〜3-0〜ubuntu-bionic则存在启动容器的问题。以下命令将安装最新的工作版本:

apt-get install docker-ce=18.06.1~ce~3-0~ubuntu
Run Code Online (Sandbox Code Playgroud)

要使Docker服务器在安装后在WSL中运行,请关闭所有打开的终端并以管理员身份启动新的Ubuntu终端(即,右键单击Ubuntu快捷方式,然后单击“以管理员身份运行”)。最后,运行以下命令:

sudo cgroupfs-mount
sudo service docker start
Run Code Online (Sandbox Code Playgroud)

sudo service docker startWindows每次重新启动时都必须运行。但是,如果希望避免这种情况,可以按照此处列出的步骤,使用Task Scheduler和Shell脚本将其自动化。

使用以下命令测试一切是否正常:

docker run hello-world
Run Code Online (Sandbox Code Playgroud)

参考:https : //medium.com/faun/docker-running-seamlessly-in-windows-subsystem-linux-6ef8412377aa

  • 今天刚刚尝试了整个过程-不起作用,我收到了“无法在tcp://0.0.0.0:2375连接到Docker守护程序。Docker守护程序正在运行吗?” 错误 (2认同)
  • @kpollock我建议尝试重新安装Ubuntu WSL,然后完全重新启动该过程。确保您正在运行最新的Windows 10版本(我在1809年),它将使用_cgroups_启用。在具有提升的权限的终端中运行命令也很重要。我能够在没有安装适用于Windows的Docker桌面的其他运行Windows 10版本1809的系统上运行它。 (2认同)

Von*_*onC 5

注意:如果您使用的是WSL(Linux的Windows子系统)中的Ubuntu,请务必了解Docker客户端正在运行,而不是Docker服务器(守护程序)正在运行。

请参阅Microsoft / WSL问题2114此线程

对于服务器,您仍然只需要使用适用于Windows的Docker及其Hyper-V VM。

然后,Microsoft / WSL问题2102添加:

通过将DOCKER_CERT_PATH环境变量(我从运行中获得eval $(docker-machine.exe env --shell bash))从“ C:\C:\Users\mmarchini\.docker\machine\machines\default”更改为“ /mnt/c/Users/mmarchini/.docker/machine/machines/default/”,可以从WSL内部使TLS工作。
至少docker build似乎现在可以正常工作,我稍后会尝试使用docker-compose

请参阅以下脚本(来自Matheus Marchini)以正确的设置启动docker-machine bash:

#!/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)
Run Code Online (Sandbox Code Playgroud)