Windows的Docker无法正常工作


70

我现在已经安装了Docker工具箱,并且收到所有错误:

Get http://127.0.0.1:2375/v1.20/version: dial tcp 127.0.0.1:2375: ConnectExtcp: No connection could be made because the target machine actively refused it..
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?

docker version 输出:

Client:
 Version:      1.8.1
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   d12ea79
 Built:        Thu Aug 13 02:49:29 UTC 2015
 OS/Arch:      windows/amd64
Get http://127.0.0.1:2375/v1.20/version: dial tcp 127.0.0.1:2375: ConnectEx tcp: No connection could be made because the target machine actively refused it..
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?

但是VM在VirtualBox下运行。我到处搜索,但找不到解决方案。

UPDATE1:我正在使用Windows 8.1,并且还尝试通过Kinematic进行启动。

UPDATE2:当我尝试Virtualbox Test Build 5.0.3或更高版本时,一切都像魅力一样。您可以在这里下载:https : //www.virtualbox.org/wiki/Testbuilds


我正在使用Windows 10虚拟框5.0.8。通过工具箱安装的Docker客户端版本1.8.3并得到相同的错误。
乔尔·汉德威尔

我认为尚未正式支持Windows 10。
Gowtham Gopalakrishnan 2015年

Answers:


64

赶紧跑:

"C:\Program Files\Docker Toolbox\docker-machine" ls

获取机器名称,然后运行:

"C:\Program Files\Docker Toolbox\docker-machine" env <MACHINE_NAME_HERE> --shell=[cmd|powershell]

并且您应该得到这样的东西:

"C:\Program Files\Docker Toolbox\docker-machine" env default --shell=cmd
set DOCKER_TLS_VERIFY=1
set DOCKER_HOST=tcp://192.X.X.X:2376
set DOCKER_CERT_PATH=C:\Users\X\.docker\machine\machines\default
set DOCKER_MACHINE_NAME=default
# Run this command to configure your shell:
# copy and paste the above values into your command prompt

我还得到了一个错误open C:\Users\X\.docker\machine\machines\default\server.pem: The system cannot find the file specified. ,并通过将我的VirtualBox升级到版本5.0.3(从他们的每晚构建版本中)解决了该错误

长版:

我遇到了同样的问题,之后,安装手册中的“从Windows命令行提示符中使用Docker(cmd.exe)”部分将我引向正确的方向。

基本上,docker的工作方式是将“ docker”命令传递到docker服务(在端口2375上运行)。从Windows主机运行docker时,该服务实际上在docker创建的linux主机上运行(您可以通过打开virtualbox ui看到它)。

通常的流程如下:

  1. 默认计算机已创建
  2. 机器的启动器(动态/“ Docker Quickstart Terminal” / cmd)等待机器启动,获取其IP地址并将linux ip:port设置为服务地址(而不是127.0.0.1:2375) / powershell变量
  3. 从这一点开始,所有docker ...命令都将发送到linux主机,并且一切都几乎像本地linux一样工作

问题是机器设置存在一些问题(我猜是新的虚拟盒子,但我不确定,有时间去研究它)。您可以通过运行ls命令来查看该命令,并注意到(至少在我的情况下)计算机的状态为“超时”,并且没有url,这与手册中显示的输出不同。

这将导致无法设置环境值并且docker ...命令将失败。

除了运行命令,您还可以Docker Quickstart Terminal使用sh shell启动执行相同操作的。

关于证书错误,我尝试使用以下方法从虚拟机中重新生成证书:

/usr/local/bin/generate_cert --overwrite --host=default,127.0.0.1,10.0.2.15,192.168.99.100 --ca=/var/lib/boot2docker/tls/ca.pem --ca-key=/var/lib/boot2docker/tls/cakey.pem --cert=/var/lib/boot2docker/tls/server.pem --key=/var/lib/boot2docker/tls/serverkey.pem

尝试将证书复制到主机时出现“协议错误”,这使我想起了旧的virtualbox共享文件夹错误,因此对于docker来说可能不是问题,但与virtualbox兼容-我已升级到最新的每晚版本(5.0 .3-102224),则重新生成了默认图片,这似乎可以解决它。由于docker和virtualbox都未正式支持Windows 10,所以我不确定这是否是导致证书错误的原因,无论如何都可以尝试从虚拟机复制证书(您已经代码块中的路径)到本地用户目录(它映射到虚拟机中的/ c / Users / X /)


2
它向我报告错误:open C:\Users\<my_username>\.docker\machine\machines\default\ca.pem: The system cannot find the file specified.。当我进入目录时,那里没有证书。
Gowtham Gopalakrishnan

似乎是错误或类似的东西:https
Gowtham Gopalakrishnan 2015年

2
更新:我也尝试使用命令重新生成证书,docker-machine regenerate-certs default但是它永远卡住了。
Gowtham Gopalakrishnan

顺便说一句,我遇到了同样的问题,最终解决它的是升级到病毒盒5.0.3(轻巧地构建)
SimSimY

1
嗨,感谢您提供这些详细信息,如果可以帮助您,这里是我所做的事情的履历:1)"C:\Program Files\Docker Toolbox\docker-machine" ls 2)安装一个虚拟版本的Virtual Box 3)docker-machine regenerate-certs default(在安装虚拟版本Virtual Box之前,此命令永无止境)4)"C:\Program Files\Docker Toolbox\docker-machine" env default --shell=cmd 5 )打开Docker Terminal并设置变量6)关闭Docker Terminanl,然后重新打开它,现在可以使用了;-)
Baptiste Gaillard

8

以下对我有用(Docker Toolbox 1.8.1b和Windows 7)。它是上面评论中概述的@ baptiste-gaillard的简化版本。简短答案:一开始使用VirtualBox 5.03或更高版本。

  1. 下载VirtualBox 5.03(在本文发布时每晚构建)和扩展包。
  2. 重新启动笔记本电脑。(清除正在运行的VirtualBox内容。)
  3. 安装VirtualBox 5.03和扩展包5.03。
  4. 完全删除默认VM(删除文件)。
  5. 重新运行Docker Quickstart Terminal快捷方式以生成默认VM。

在创建必需的TLS密钥方面,Quickstart脚本与VirtualBox 5.03看起来相处得更好。


我找不到版本5.03。最新版本是5.0.2。你可以参考链接吗?
Gowtham Gopalakrishnan

1
如果您不希望重新引导计算机,则可以跳过/替换第2步。安装将阻止并告知您需要终止某些进程才能继续安装VirtualBox,PID甚至会打印在向导UI中。运行taskkill -f -pid [PID_LISTED]所有PID,安装应继续正常进行。
plog17

8

遇到了与您显示的问题相同的问题,并在几个小时前将其修复。

所有需要做的就是禁用Hyper-V。运行具有管理员权限的命令提示符,然后运行以下命令:

bcdedit /set hypervisorlaunchtype off

重新启动PC,重新启动后打开virtualbox并删除默认vm,返回docker quickstart终端,并在命令中输入以下内容:

docker run hello-world

完成了!希望它能解决您的问题


2
Windows更新将系统管理程序打开后,这解决了我在Windows 10上的问题
Roman Dvoskin

在Windows上启用/禁用Hyper-V:fourforums.com/tutorials/…–
G. Ghez,

5

这对我有用

1)首先启动命令行工具,并通过运行获取机器的IP地址

docker-machine ls命令

2)重新生成证书docker-machine regenerate-certs

3)在我的情况下,手动设置evn变量证书的位置不同

设置DOCKER_TLS_VERIFY = 1

设置DOCKER_HOST = tcp:// machine_IP:2376

设置DOCKER_CERT_PATH = C:\ Users \ X.docker \ machine \ certs

设置DOCKER_MACHINE_NAME =默认

现在运行docker版本

这是我的情况下的输出

客户端:版本:1.8.1 API版本:1.20 Go版本:go1.4.2 Git提交:d12ea79内置:Thu Aug 13 02:49:29 UTC 2015 OS / Arch:Windows / amd64

服务器:版本:1.8.1 API版本:1.20 Go版本:go1.4.2 Git提交:d12ea79内置:Thu Aug 13 02:49:29 UTC 2015 OS / Arch:linux / amd64


3

Docker Toolbox(在1.8.x中)安装默认情况下将Docker Daemon配置为通过TLS协议(版本1.8)使用安全连接。

如果您使用的旧版守护程序未得到保护,则至少意味着两件事:-端口号从2375更改为2376-您的守护程序客户端需要出示证书才能与docker引擎/服务器通信。

因此,sandindia的回复表明精确到docker客户端的环境变量是连接到docker服务器/引擎的良好配置:

#You're using a TLS secured daemon : 
set DOCKER_TLS_VERIFY=1

# Precise the Docker Host IP and port, the TLS default is 2376
set DOCKER_HOST=tcp://*<docker_host_IP>*:2376

# The paths to the certificate and client key needed to authenticate to the daemon
# You should have 3 files in this directory : ca.pem, cert.pem and key.pem 
# In my case the default path looks like : 
set DOCKER_CERT_PATH=C:\Users\*<username>*\.docker\machine\machines\default

#the name of your Docker Host VM : 
set DOCKER_MACHINE_NAME=default

有关TLS配置的docker文档:https : //docs.docker.com/articles/https/

希望对您有所帮助;)


3
Close the virtual machine from Virtual Box (you don't have to delete it)
Close Kitematic
Close Docker Quickstart Terminal

现在按顺序执行以下操作:

Open Kitematic
Open Docker Quickstart Terminal

重要的是不要在Kitematic之前打开Docker Quickstart Terminal,因为Kitematic将为Docker Quickstart Terminal初始化事情

我不需要执行任何命令行。

我希望这会对身体有所帮助。


2

我也遇到了同样的问题,但是我能够解决它而不必在命令行中键入任何内容,它开箱即用。

事实证明,缺少一些初始化步骤,如上面接受的答案所示。为什么默认的Docker安装还没有这样做呢?我也缺少证书。因此,我卸载了所有内容并从头开始。但是,安装完成后,这次不要先打开Docker Quick Start终端,而要打开Kitematic来为您进行第一次初始化

Kitematic为我创建了证书,设置了缺少的env变量,然后打开了Docker Quick Start终端。我输入docker run hello-world,然后docker version这次按预期方式工作,没有错误消息。

请注意,当我首先打开“快速入门”终端时,此方法不起作用

我正在VMWare 10实例中测试Docker,并且在每种情况下都能够复制此问题及其解决方案(解决方法)。

我希望这有帮助。


2

我通过简单地在VirtualBox管理器中删除默认VM,重启PC(以防万一),然后重新运行Docker Quickstart Terminal来解决问题。而已。

Docker 1.8.2和Virtual Box 5.0.4


1
  1. 更新到5.0.3以上的最新虚拟盒
  2. 重新启动系统
  3. 打开虚拟框并删除默认虚拟机
  4. 打开Docker快速入门终端
  5. docker run hello-world

您完成了。


我今天早上醒来,再次看到同样的错误,尽管三天前
还很

1

删除并删除笔记本电脑上的所有旧v.machine:1.打开VirtualBox,右键单击“默认”,“删除”,“删除所有文件”。2.命令提示符(以管理员身份运行)> docker-machine rm default

卸载Virtualbox,Docker工具箱和Git。导航到c:\ Users \ Vinita,然后删除目录。.docker和.Virtualbox CClean文件和注册表。重启。

清洁完成。

I.从Docker Toolbox下载适用于Windows的最新版本的Docker工具(1.10.2),右键单击下载的文件,然后单击“以管理员身份运行”,这将安装-Docker Quickstart,Kitematic和Virtualbox。

二。从Testbuilds-Oracle VM VirtualBox下载VirtualBox的最新测试版本(5.01.15-105696-win.exe)。再次以管理员身份运行。

(您可以忽略任何警告,并在已经安装了Docker的VirtualBox上进行覆盖)。

到目前为止,没有什么不寻常的。我们刚刚安装了具有管理员权限的软件。现在,控制面板>网络和共享中心>更改适配器设置:右键单击“ VirtualBox仅主机网络#2”作为“属性”。 检查> VirtualBox NDIS6桥接网络驱动程序。 (如果已选中,请取消选中并再次检查。)

大功告成 这是我们采用的唯一解决方法!

Kitematic和Docker Quickstart现在都可以使用。

第一次右键单击Kitematic并以admin身份运行。在Windows 10上测试。


1

使用Docker 1.8.1d时存在相同的问题,即卸载了1.8.1c。最终解决了以下问题:安装最新的Virtual Box(5.0.18),在出现提示时重新启动并启动Kitematic。Kitematic最初失败,并提供了删除和重新安装我所做的VM的选项。之后,我的快速入门终端就可以了。


1

听起来像是虚拟盒子的问题,就我而言,我已经执行了以下步骤来解决该问题

  • 通过'docker-machine stop'停止Docker计算机
  • Windows OS中的开放网络和共享中心
  • 单击更改适配器设置
  • 禁用仅VirtualBox主机网络
  • 通过'docker-machine start'启动Docker计算机

0

对于Windows 10和VirtualBox 5.0.14,这已经发生了几次。

这似乎与未正确关闭VirtualBox有关(我相信),例如断电!

  1. 关闭Docker VM

  2. 关闭Kitematic

  3. 启动Docker快速入门终端

  4. 输入终端:

docker-machine.exe -D ls

  1. 启动Kitematic。VM现在显示。

如果那不起作用,请再次尝试1-3,这次尝试重新生成证书。然后执行步骤4。

奇怪的是,终端docker images中没有列出它们,但说它无法连接到127.0.0.1:2375(但docker-machine ls显示了运行在192.168.99.100:2376上的默认计算机)。


0

系统重启后运行docker镜像时遇到完全相同的错误。我在Windows 7 64位元上使用docker版本1.10以及virtualbox 5.0.10和mintty(终端随附Windows的Git)

执行docker-machine ls告诉我虚拟机处于“超时”状态。 $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default virtualbox Timeout 因此,我重新启动了虚拟机, $ docker-machine restart default 然后再次列出状态,告诉我证书绑定到错误的地址: $ docker-machine ls Unable to query docker version: Get https://192.168.56.101:2376/v1.15/version: x509: certificate is valid for 192.168.99.101, not 192.168.56.101 然后,我重新生成证书 $ docker-machine regenerate-certs default ,最后 $ eval $(docker-machine env default --shell=bash) ,泊坞窗再次工作!


0

只需重新创建默认计算机,然后运行

docker-machine env default

这个对我有用。


0

如果您将docker用于Windows(beta),请按照以下步骤操作:

  • 禁用“ DockerNAT”网络适配器
  • 通过任务栏/ docker / settings /重置为出厂默认设置运行“重置为出厂默认设置”

0

在我的非虚拟机上,我遇到了同样的错误。以下步骤对我有用

右键单击docker-> Under Settings-> General,是否在未启用TLS的tcp:// localhost:2375上具有Expose守护程序?如果要按说明访问守护程序,则需要这样做。但是请记住,此设置不安全,如警告中所述。


0

我在Windows 10 Home上的Docker Toolbox遇到了同样的问题。从这里解决问题的步骤:

  1. 运行docker-machine ls以获取列表,您可能应该看到以下内容:
NAME      ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER    ERRORS
default   -        virtualbox   Stopped                 Unknown
  1. 可选步骤升级(请耐心等待):
docker-machine upgrade
  1. 重新启动default
docker-machine start default

如果说:

机器“默认”已在运行。

  1. 现在您应该可以运行docker version并看到类似以下内容:
Client:
 Version:           19.03.1
 API version:       1.40
 Go version:        go1.12.7
 Git commit:        74b1e89e8a
 Built:             Wed Jul 31 15:18:18 2019
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.12
  Git commit:       633a0ea838
  Built:            Wed Nov 13 07:28:45 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

-2

我的问题是“ ...获取IP地址时出错”,感谢所有在这里阅读并执行以下步骤的人员,他们贡献了自己的解决方案:

  1. 关闭Docker

  2. 打开VirtualBox管理器

  3. 删除默认虚拟机

  4. 首先启动Kitematic(我认为这很重要)

  5. 启动Docker

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.