Docker for Windows无法正常工作

时间:2015-08-17 10:06:10

标签: docker

我现在已经安装了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

19 个答案:

答案 0 :(得分:62)

跑步:

"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(来自他们的nightly builds

来解决它

长版:

我遇到了同样的问题,之后和#34;在Windows命令行提示符下使用Docker(cmd.exe)&#34;来自installation manual的部分让我朝着正确的方向前进

基本上,docker的工作方式是&#34; docker&#34;命令被传递给docker服务(在端口2375上运行)。当您从Windows主机运行docker时,该服务实际上在docker创建的linux主机上运行(您可以通过打开virtualbox ui来查看它)。

通常的流程如下:

  1. 创建默认计算机
  2. 机器的启动器(kinamatic /&#34; Docker Quickstart Terminal&#34; / cmd)等待机器启动,获取它的IP地址并将linux ip:port设置为服务地址在少数enviremnt / powershell变量中(而不是127.0.0.1:2375)
  3. 从这一点开始,所有docker ...命令都发送到linux主机,一切都像本机linux一样工作
  4. 问题在于机器设置存在一些问题(我猜新的虚拟盒子,但我不确定并且有时间深入研究它)。你可以通过runnung看到ls命令并注意到(至少在我的情况下)机器的状态是&#34;超时&#34;并且没有网址,与手册中显示的输出不同。

    这会导致不设置环境值并且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
    

    我在尝试将证书复制到主机时遇到了#34;协议错误,这提醒我一个旧的virtualbox共享文件夹错误,所以这可能不是docker的问题,而是虚拟机 - 我升级到最新的夜间版本(5.0.3-102224),重新生成默认图像,似乎解决了它。由于windows 10还没有得到docker和virtualbox的正式支持,我不确定这是否与导致你获得证书错误相同,无论如何都可以尝试从虚拟机中复制证书(你有代码块中的路径)到本地用户目录(它映射到虚拟机中的/ c / Users / X /)

答案 1 :(得分: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。
  6. 对于创建必需的TLS密钥,QuickBox文件似乎与VirtualBox 5.03相处得更好。

答案 2 :(得分:7)

与您展示的问题相同,并在几小时前修复了它。

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

bcdedit /set hypervisorlaunchtype off

重新启动电脑,打开虚拟机并在重新启动后删除默认虚拟机,返回docker quickstart终端,并将以下内容放入命令:

docker run hello-world

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

答案 3 :(得分: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 version

这是我案例中的输出

客户端:  版本:1.8.1  API版本:1.20  转到版本:go1.4.2  Git提交:d12ea79  建造:2015年8月13日星期四02:49:29  OS / Arch:windows / amd64

服务器:  版本:1.8.1  API版本:1.20  转到版本:go1.4.2  Git提交:d12ea79  建造:2015年8月13日星期四02:49:29  OS / Arch:linux / amd64

答案 4 :(得分:3)

Docker Toolbox(在1.8.x中)安装默认配置您的Docker守护程序通过TLS协议(版本1.8)使用安全连接。

如果您使用的是不受保护的旧版本守护程序,则至少意味着两件事:   - 端口号从2375变为2376   - 您的守护程序客户端需要提供证书才能与您的docker engine / server通信。

所以sandiindia的回复表明了对于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/

我希望它有所帮助;)

答案 5 :(得分: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终端,因为Kitematic将为Docker Quickstart Terminal初始化东西

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

我希望这对某些人有所帮助..

答案 6 :(得分:2)

我也有同样的问题,但我能够解决它而无需在命令行上输入任何内容,它只是开箱即用。

事实证明,正如上面接受的答案所指出的那样,缺少一些初始化步骤。为什么默认的Docker安装不是这样做的?我也缺少证书。所以,我卸载了所有内容并从头开始重新启动。但是,安装完成后,这次首先不要打开Docker快速入门终端,而是打开Kitematic而不是为你做第一次初始化

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

请注意,当我首先打开“快速启动”终端时,这不起作用

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

我希望这会有所帮助。

答案 7 :(得分:2)

我通过简单地删除VirtualBox管理器中的默认VM,重启PC(以防万一),然后重新运行Docker Quickstart终端来解决我的问题。就是这样。

Docker 1.8.2和Virtual Box 5.0.4

答案 8 :(得分:1)

  1. 更新到5.0.3以上的最新虚拟框
  2. 重新启动系统
  3. 打开虚拟框并删除默认虚拟机
  4. 打开docker快速启动终端
  5. 运行docker run hello-world
  6. 你已经完成了。

答案 9 :(得分:1)

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

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

完成清洁。

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

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

(您可以忽略已安装Docker的VirtualBox上的任何警告和覆盖)。

到目前为止,没有什么与众不同的。我们刚安装了具有管理员权限的软件。 现在,控制面板&gt;网络和共享中心&gt;更改适配器设置: 右键单击属性的VirtualBox Host-Only Network#2。 检查&GT; VirtualBox NDIS6桥接网络驱动程序。 (如果已经选中,请取消选中并再次检查。)

你完成了。这是我们唯一采用的解决办法!

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

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

答案 10 :(得分:1)

这听起来像虚拟盒的问题,  在我的情况下,我已执行以下步骤来解决问题

  • 通过'docker-machine stop'停止Docker机器
  • 在Windows操作系统中打开网络和共享中心
  • 点击更改适配器设置
  • 禁用VirtualBox-Host Only网络
  • 通过'docker-machine start'启动Docker机器

答案 11 :(得分:1)

Docker 1.8.1d遇到了同样的问题,卸载了1.8.1c。通过安装最新的Virtual Box(5.0.18)最终修复了问题,在提示时启动并启动Kitematic。 Kitematic最初失败,并提供删除和重新安装VM的选项。之后我的QuickStart终端没问题。

答案 12 :(得分:0)

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

  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

答案 13 :(得分:0)

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

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

答案 14 :(得分:0)

如果您使用docker for windows(beta),请按照以下步骤操作:

  • 禁用&#34; DockerNAT&#34;网络适​​配器
  • 运行&#34;重置为出厂默认设置&#34;通过任务栏/泊坞窗/设置/重置为出厂默认值&#34;

答案 15 :(得分:0)

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

docker-machine env default

它对我有用。

答案 16 :(得分:0)

我在系统重启后运行 docker images 时遇到了完全相同的错误。我在Windows 7 64位上使用了docker版本1.10与virtualbox 5.0.10和mintty(终端附带Git for Windows)

执行 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) 然后码头工人再次工作!

答案 17 :(得分:0)

在使用VirtualBox 5.0.14的Windows 10上,这种情况已经发生了几次。

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

  1. 关闭Docker VM

  2. 关闭Kitematic

  3. 启动Docker快速入门终端

  4. 输入终端:

  5.   

    docker-machine.exe -D ls

    1. 启动Kitematic。 VM现在出现了。
    2. 如果不起作用,请再次尝试1-3,这次尝试重新生成 证书。然后执行第4步。

      有一件事很奇怪,就是在终端docker images中没有列出它们但是说它无法连接到127.0.0.1:2375(但docker-machine ls显示默认机器在192.168.99.100上运行:2376)

答案 18 :(得分:-2)

我的问题是&#34; ...错误获取IP地址&#34;感谢这里的所有人,他们提供了我所阅读的解决方案并执行了这些步骤:

  1. 关闭Docker

  2. 打开VirtualBox Manager

  3. 删除默认虚拟机

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

  5. 启动Docker