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

时间:2018-01-01 07:09:38

标签: 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?

有没有解决这个问题的建议?

7 个答案:

答案 0 :(得分:19)

在这篇文章中找到解决方案: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

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

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

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

$ docker run hello-world

成功回应:

Hello from Docker!This message shows that your installation appears to be working correctly.

答案 1 :(得分:4)

注意:如果您使用WSL (Windows Subsystem for Linux)中的Ubuntu,请了解docker客户端是否正常工作,而不是docker服务器(守护程序)。

请参阅Microsoft/WSL issue 2114this thread

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

然后,Microsoft/WSL issue 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

请参阅this script(来自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)

答案 2 :(得分:1)

如果您正在运行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

只需遵循相同的instructions即可在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

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

sudo cgroupfs-mount
sudo service docker start
每次重新启动Windows时,必须运行

sudo service docker start。但是,如果您希望避免这种情况,可以按照here列出的步骤,使用任务计划程序和外壳程序脚本将其自动化。

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

docker run hello-world

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

答案 3 :(得分:1)

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

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

假设您已经为Windows和Windows安装了docker桌面 在tcp:// localhost:2375上的Settings-> General-> Expose守护进程中选中不带TLS

答案 4 :(得分:1)

如果您将docker桌面用于Windows(并且不需要TLS进行连接),请转到docker桌面设置的常规部分,并启用复选框“在不带TLS的tcp:// localhost:2375上公开守护程序”复选框。

更新:在较新的Docker桌面版本中,WSL集成已移至资源部分。

答案 5 :(得分:0)

只需要在系统中添加一个env变量

enter image description here

答案 6 :(得分:0)

除了已经说过的内容之外,我还想与您分享我在设置时遇到的一些问题以及最终让我开始使用 WSL2/Docker 桌面组合的解决方案。 这不是一个完整的指南,只是故障排除的另一个来源!

我的目标是

  1. 开始尝试使用 Docker。
  2. 设置我的环境,使其符合推荐和最舒适的要求。
  3. 基本上能够在使用 Docker 桌面的同时在 Linux 上下文中工作。

我是怎么做的

  1. 我将我的 PC 从 Win 10 Home 升级到 Win 10 Pro,以避免我读到人们在使用 Home 版时遇到的各种问题。
  2. 我安装了 Docker Toolbox,然后删除了它以及我在 PC 上安装的 Oracle VM。我遇到了各种小问题,在线阅读说最好也删除 Oracle VM。
  3. 我安装了 Docker 桌面。

问题及其解决方案

    1. 旧的 Docker Tools 安装中的一些环境变量仍然存在。 这导致 Docker 桌面行为异常。
    解决方案:我删除了所有这些。 (任何提到 Docker 的变量名)
    2. 当尝试通过 Ubuntu WSL2 连接到 localhost:2375 上的 Docker 时,出现了著名的“......甚至 docker 正在运行”错误。 值得一提的是,在 cmd 上,docker 在此阶段工作正常。
    解决方案:
      - 清除我之前在 Ubuntu WSL2 上安装的 Docker。
      - 确保在我的 ubuntu WSL2 上删除所有提到 Docker 的环境变量。
      - 停止 Hyper-v,重新启动,在 Windows 上重新启动 Hyper-V。
      - 通过 `apt-get` 安装最新版本的 Docker。

现在在 Ubuntu WSL2 上运行“docker context ls”来检查我的设置应该会导致:

NAME        DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT   ORCHESTRATOR
default *   Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                         swarm

从 Ubuntu WSL2 运行 Docker 信息:

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.0-docker)
  scan: Docker Scan (Docker Inc., v0.5.0)

Server:
 Containers: 3
  Running: 0
  Paused: 0
  Stopped: 3
 Images: 3...