Windows 的 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?

但是虚拟机是在 VirtualBox 下运行的,我到处都找过了,但是没有找到解决方案。

UPDATE1 : 我正在使用 Windows 8.1,并且也尝试通过 Kinematics 启动。

UPDATE2: 当我尝试使用 VirtualboxTestBuild 5.0.3或更高版本时,一切都非常顺利。你可以在这里下载: https://www.virtualbox.org/wiki/Testbuilds

78803 次浏览

快跑:

"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 命令行提示符(cmd.exe)中的 Docker”部分使我找到了正确的方向

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

通常的流程如下:

  1. 创建默认机器
  2. 机器的启动器(kinamatic/“ Docker Quickstart Terminal”/cmd)等待机器启动,获取其 IP 地址,并在少数环境/powershell 变量中将 linux IP: port 设置为服务地址(而不是127.0.0.1:2375)
  3. 从这里开始,所有的 docker ...命令都被发送到 linux 主机,所有的命令几乎都作为本机 linux 运行

问题是机器设置有一些问题(我猜是新的虚拟机,但我不确定,所以有时间深入研究)。您可以通过运行 ls命令看到这一点,并注意到(至少在我的例子中)机器的状态是“超时”,并且没有 url,这与手册中显示的输出不同。

这将导致不设置环境值并使 docker ...命令失败。

除了运行命令之外,您还可以启动 Docker Quickstart Terminal,它执行相同的操作,但是使用 shshell

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

/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

当我试图将证书复制到主机时,出现了“协议错误”,这让我想起了一个旧的虚拟机共享文件夹错误,所以这可能不是 docker 的问题,而是虚拟机的问题——我升级到了最新的夜间版本(5.0.3-102224) ,重新生成了默认映像,似乎解决了这个问题。由于 docker 和 Virtual box 都还没有正式支持 Windows 10,我不确定这是否会导致证书错误,在任何情况下都可以尝试将证书从虚拟机(代码块中有路径)复制到本地用户目录(它被映射到/c/Users/X/在虚拟机中)

这对我有用

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

Docker-machine ls 命令

2)重新生成证书 码头机械再生证书

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

设置 DOCKER _ TLS _ VERIFY = 1

Set DOCKER _ HOST = tcp://machine _ IP: 2376

Set DOCKER _ CERT _ PATH = C: Users X.DOCKER machine certs 设置 DOCKER _ CERT _ PATH = C: 用户 X.DOCKER 机器证书

设置 DOCKER _ MACHINE _ NAME = default

现在运行 码头版本

在我的例子中,输出如下

客户: 版本: 1.8.1 API 版本: 1.20 Go 版本: go1.4.2 Git commit: d12ea79 Git 提交: d12ea79 建造时间: 世界协调时2015年8月13日星期四02:49:29 操作系统/Arch: windows/amd64

服务器: 版本: 1.8.1 API 版本: 1.20 Go 版本: go1.4.2 Git commit: d12ea79 Git 提交: d12ea79 建造时间: 世界协调时2015年8月13日星期四02:49:29 操作系统/Arch: linux/amd64

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

如果您使用的是不安全的旧版本守护进程,那么至少意味着两件事: 港口编号由2375改为2376 - 您的守护进程客户端需要提供一个证书来与您的 docker 引擎/服务器进行通信。

因此,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/

我希望这能有所帮助;)

下面的方法对我很有效(Docker Toolbox 1.8.1 b 和 Windows 7)。这是@Baptiste-gaillard 在上述评论中概述的内容的简化版本。简短的回答: 从一开始就使用 VirtualBox 5.03或更高版本。

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

在创建必要的 TLS 键方面,Quickstart 脚本似乎与 VirtualBox 5.03相处得更好。

跟你说的一样,几小时前刚修好。

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

bcdedit /set hypervisorlaunchtype off

重新启动你的电脑,打开虚拟机,在重新启动后删除默认的 vm,返回到 docker 快速启动终端,输入以下命令:

docker run hello-world

你就完了,希望这能解决你的问题

我也有同样的问题,但我能够解决它,而不必在命令行上键入任何东西,它只是工作在框。

结果发现缺少了一些初始化步骤,正如上面已接受的答案所指出的那样。为什么默认的 Docker 安装没有这样做呢?我还丢了证书。所以,我卸载了所有东西,重新开始。但是,在安装完成之后,这次是在 不要首先打开 Docker 快速启动终端,而是打开 Kitatic 为您进行第一次初始化附近。

Kitatic 为我创建了证书,设置了丢失的 env 变量,然后我打开了 Docker 快速启动终端。我输入了 docker run hello-world,然后是 docker version,这次它按预期工作,没有错误消息。

请注意,当我首先打开 Quick Start 终端 时,这不起作用。

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

希望这个能帮上忙。

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

Docker 1.8.2和 Virtual Box 5.0.4

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

你完蛋了。

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

它的重要的 不要开启码头快速启动终端之前的基德曼,因为基德曼将初始化的事情为码头快速启动终端

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

我希望这能帮助一些人. 。

这种情况在我使用 VirtualBox5.0.14的 Windows10上发生过几次。

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

  1. 关闭 Docker 虚拟机

  2. 关闭风筝

  3. 启动 Docker 快速启动终端

  4. 输入终端:

码头机器,出租车司机

  1. 启动风筝系统,虚拟机出现了。

如果这不起作用,再次尝试1-3,这次尝试再生 然后执行步骤4。

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

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

卸载 Virtualbox,Docker 工具箱和 Git。 导航到 c: Users 维尼塔,并删除 dirs. docker 和. Virtualbox 清除文件和注册表。 重启。

打扫完了。

从 Docker Toolbox 下载适用于 Windows 的 Docker 工具的最新版本(1.10.2) 右键点击下载的文件和“作为管理员运行” 这将安装-Docker 快速启动,风筝和虚拟盒。

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

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

目前为止,没什么异常,我们只是安装了有管理权限的软件。 现在,控制面板 > 网络和共享中心 > 更改适配器设置: 右键单击 VirtualBox Host-Only Network # 2获取属性。 勾选 > VirtualBox NDIS6桥接网络驱动程序。 (如果已经选中,取消选中,再次选中。)

你完了,这是我们唯一的解决办法!

Kitematics 和 Docker 快速启动现在都可以工作了。

右键点击风筝和运行作为管理员的第一次。 在 Windows10上测试。

在系统重新启动后运行 码头图像时,我遇到了完全相同的错误。我在 Windows 764位上使用了 docker version 1.10,带有 Virtual box 5.0.10和 minty (该终端带有 Windows 下的 Git)

执行 码头机器显示虚拟机处于超时状态。 $码头机器 名称活动驱动程序状态 URL 群 DOCKER 错误 默认的虚拟框超时 所以我重启了虚拟机 $docker 机器重启默认值 然后列出状态再次告诉我证书是绑定到一个不正确的地址: $码头机器 无法查询 docker 版本: 获取 https://192.168.56.101:2376/v1.15/version : x509: 证书有效期为192.168.99.101,而不是192.168.56.101 然后我重建证书 $docker-machine 恢复-certs default 最后 $eval $(docker-machine env default —— shell = bash) 那码头工人又开始工作了!

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

docker-machine env default

对我有用。

对于 Docker 1.8.1 d 也有同样的问题,卸载了1.8.1 c,最终通过安装最新的 Virtual Box (5.0.18)修复了问题,当提示时重新启动并启动 Kitatic。基特曼首先失败,并提供选项,以删除和重新安装的 VM,我做了。在那之后,我的快速启动终端就没问题了。

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

  • 禁用“ DockerNAT”网络适配器
  • 通过任务栏/docker/sets/Reset to Factory default 运行“ Reset to Factory default”

听起来像是虚拟盒子的问题, 在我的例子中,我执行了以下步骤来解决这个问题

  • 用“停泊机-停泊机”停止停泊机
  • 在 Windows 操作系统中开放网络和共享中心
  • 单击更改适配器设置
  • 禁用虚拟主机专用网络
  • 启动多克机由’多克机启动’

我的问题是“ ... 获取 IP 地址的错误”感谢在座的所有人,他们贡献了他们的解决方案,我通读并执行了以下步骤:

  1. 关闭 Docker

  2. 打开 VirtualBox 管理器

  3. 删除默认虚拟机

  4. 首先开始风筝(我认为这很重要)

  5. 从码头开始

在我的非虚拟机上,我得到了同样的错误

右键单击 docker-> 在设置-> 常规你有暴露守护进程在 tcp://localhost: 2375没有启用 TLS?如果您想要访问所描述的守护进程,则需要这样做。但是请记住,正如警告中所解释的那样,这个设置是不安全的。

我在 Windows10 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