Docker for Windows无法正常工作

Gow*_*nan 69 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?
Run Code Online (Sandbox Code Playgroud)

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?
Run Code Online (Sandbox Code Playgroud)

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

更新1:我正在使用Windows 8.1,也试图通过Kinematic开始.

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

Sim*_*imY 62

赶紧跑:

"C:\Program Files\Docker Toolbox\docker-machine" ls
Run Code Online (Sandbox Code Playgroud)

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

"C:\Program Files\Docker Toolbox\docker-machine" env <MACHINE_NAME_HERE> --shell=[cmd|powershell]
Run Code Online (Sandbox Code Playgroud)

你应该得到这样的东西:

"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
Run Code Online (Sandbox Code Playgroud)

我也得到一个错误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主机运行docker时,该服务实际上在docker创建的linux主机上运行(您可以通过打开virtualbox ui来查看它).

通常的流程如下:

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

问题是机器设置存在一些问题(我猜测新的虚拟盒子,但我不确定并且有时间深入研究它).您可以通过runnung看到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
Run Code Online (Sandbox Code Playgroud)

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

  • 它报告错误:`open C:\ Users\<my_username> \.docker\machine\machines\default\ca.pem:系统找不到指定的文件.当我进入dir时,那里没有证书. (2认同)
  • **更新:**我还尝试使用命令`docker-machine regenerate-certs default`重新生成证书,但它永远被卡住了. (2认同)

小智 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密钥,QuickBox文件似乎与VirtualBox 5.03相处得更好.


Bla*_*lah 7

和你出现的问题一样,几个小时前修好了.

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

bcdedit /set hypervisorlaunchtype off
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 在 Windows 更新打开虚拟机管理程序后,这解决了我在 Windows 10 上的问题 (2认同)

小智 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 commit:d12ea79内置:星期四8月13日02:49:29 UTC 2015 OS/Arch:windows/amd64

服务器:版本:1.8.1 API版本:1.20 Go版本:go1.4.2 Git commit:d12ea79内置:星期四8月13日02:49:29 UTC 2015 OS/Arch:linux/amd64