&引用;检查TLS连接时出错:主机未运行;从docker计算机下载到Windows主机时

&引用;检查TLS连接时出错:主机未运行;从docker计算机下载到Windows主机时,windows,docker,cygwin,openssh,Windows,Docker,Cygwin,Openssh,我有一个运行docker实例和默认docker机器vm的远程Windows主机。当我SSH进入主机并尝试运行任何docker机器命令时,即 > eval $(docker-machine env default --shell bash) docker计算机发出“检查TLS连接时出错:主机未运行。” 我在StackOverflow上搜索,发现了其他人重新生成证书并获得成功的案例,所以我尝试了这个方法,但没有成功。我重新启动了docker机器vm,但再次失败 如果docker机器命令在本地

我有一个运行docker实例和默认docker机器vm的远程Windows主机。当我SSH进入主机并尝试运行任何docker机器命令时,即

> eval $(docker-machine env default --shell bash)
docker计算机发出“检查TLS连接时出错:主机未运行。”

我在StackOverflow上搜索,发现了其他人重新生成证书并获得成功的案例,所以我尝试了这个方法,但没有成功。我重新启动了docker机器vm,但再次失败


如果docker机器命令在本地运行而不是通过ssh运行,我可以很好地使用它们,但是我需要能够最终通过ssh连接到主机并运行这些命令。我在cygwin上使用openssh。路径设置正确,如果我将env命令的输出放入我的
.ssh/environment
文件中,我甚至可以运行docker命令,如
docker ps
。我就是无法与docker机器vm交互

您可以在windows上找到安装docker的简易图腾:


对我来说,这解决了我所有的问题

首先,如果您使用Hyper-V(可能在某些其他配置中),您需要为
docker机器
使用提升的外壳

您可能能够允许与Hyper-V进行非提升式交互(我还没有用
docker machine
so YMMV测试过这一点)

一个有效的技巧是在提升的环境中运行
docker machine env VMNAME
,以获得总体轮廓。然后查找虚拟机的MAC地址,并将其硬编码为一个有用的脚本。例如对于MAC地址为00-15-5D-00-00-01的名为“MYMACHINE”的机器,以下脚本将docker从非提升外壳指向正确的机器(通过从系统的arp表解析IP):

狂欢节:

VM_MACADDR=“00-15-5D-00-00-01”
导出DOCKER\u MACHINE\u NAME=“MYMACHINE”
导出DOCKER\u TLS\u VERIFY=“1”
导出DOCKER\u HOST=“tcp://`arp-a | grep-i$VM\u MACADDR | grep-o'[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+'`:2376”
导出DOCKER\u CERT\u PATH=“$USERPROFILE\.DOCKER\machine\machines\$DOCKER\u machine\u NAME”
导出组合\u转换\u窗口\u路径=“true”
PowerShell:

$VM\u MACADDR=“00-15-5D-00-00-01”
$Env:DOCKER\u MACHINE\u NAME=“MYMACHINE”
$Env:DOCKER\u TLS\u VERIFY=“1”
$Env:DOCKER_HOST=“tcp://$(获取NetNeighbor-LinkLayerAddress$VM\u MacAddress-AddressFamily IPv4 |选择对象-第一个1)。IPAddress):2376”
$Env:DOCKER\u CERT\u PATH=“$Env:USERPROFILE\.DOCKER\machine\machines\$Env:DOCKER\u machine\u NAME”
$Env:COMPOSE\u CONVERT\u WINDOWS\u path=“true”