如何使用 Hyper-V 连接到网络设置中的 docker 服务器

How to connect to a docker server on the network set-up with Hyper-V

基本上我的问题是:如何连接到网络上的 docker 主机?

背景:

我们有一台 Windows Server 2012 机器,我想从中 运行 一个 docker 引擎。

我已经设法得到它 运行 docker-机器和 hyperv 驱动程序。我还成功地获得了一个 docker 主机,可以使用 VirtualBox 在我的本地计算机上工作,并且一直在使用它。

为了让网络上的其他人在永久设置中更轻松地访问 docker,我想在具有 Hyper-V 的服务器上使用 docker 主机实例。

在搜索答案时,我找不到任何关于在网络上配置主机的提及,只能在本地和云上找到。

我想知道我必须使用什么命令才能将本地 docker 机器连接到服务器的 docker 主机,并将其用作活动 docker主持人?

有一篇博客 post 解释了如何使用通用驱动程序添加具有 IP 的 docker 引擎,以及您需要完成的一些额外步骤。

ADDING AN EXISTING DOCKER HOST TO DOCKER MACHINE : A FEW TIPS


SSH 密钥

关于证书的底部解释了如何在使用 create 命令连接后在远程 docker 引擎上工作

旧答案

为了 create/connect 成功,本地机器必须能够通过 ssh 连接到远程 docker 引擎,而不仅仅是托管 docker 引擎的服务器。这意味着在本地计算机上生成并添加了 public 密钥(使用 puttygen 或 ssh-keygen),OpenSSH RSA public 密钥已添加到 ~/.ssh/authorized_keys 中的授权密钥列表中远程 docker 引擎。

OpenSSH RSA public 密钥的示例(因为我对这些格式感到困惑):

ssh-rsa AAAAB3NzaC1kc3MAAACBAJ3hB5SAF6mBXPlZlRoJEZi0KSIN+NU2iGiaXZXi9CDrgVxTp6/sc56UcYCp4qjfrZ2G3+6PWbxYso4P4YyUC+61RU5KPy4EcTJske3O+aNvec/20cW7PT3TvH1+sxwGrymD50kTiXDgo5nXdqFvibgM61WW2DGTKlEUsZys0njRAAAAFQDs7ukaTGJlZdeznwFUAttTH9LrwwAAAIAMm4sLCdvvBx9WPkvWDX0OIXSteCYckiQxesOfPvz26FfYxuTG/2dljDlalC+kYG05C1NEcmZWSNESGBGfccSYSfI3Y5ahSVUhOC2LMO3JNjVyYUnOM/iyhzrnRfQoWO9GFMaugq0jBMlhZA4UO26yJqJ+BtXIyItaEEJdc/ghIwAAAIBFeCZynstlbBjP648+mDKIvzNSS+JYr5klGxS3q8A56NPcYhDMxGn7h1DKbb2AV4pO6y+6hDrWo3UT4dLVuzK01trwpPYp6JXTSZZ12ZaXNPz7sX9/z6pzMqhX4UEfjVsLcuF+ZS6aQCPO0ZZEa1z+EEIZSD/ykLQsDwPxGjPBqw= rsa-key-20160224

在远程 docker 引擎中没有这个密钥,当我试图 docker ssh 进入它时给了我一个 exit status 255。此时,只有常规 ssh docker@192.168.1.165 有效。准备重复上述过程。


这篇文章也提到了 sudo,但是 Hyper-V 驱动程序使用的 boot2docker 映像已经允许无密码 sudo,所以这部分已经完成了。

端口

确保允许 TCP 端口 2376 连接到远程 docker 引擎,通过服务器的防火墙规则、物理防火墙等

命令 运行

然后这个命令将远程引擎连接到docker-machine:

> docker-machine create --driver generic --generic-ip-address 192.168.1.165 --generic-ssh-user %USERNAME% vm
> docker-machine ls
NAME             ACTIVE      DRIVER       STATE     URL                         SWARM                   DOCKER   ERRORS
default          -           virtualbox   Running   tcp://192.168.99.101:2376                           v1.10.1
vm               -           generic      Running   tcp://192.168.1.165:2376                            Unknown

vm是网络上新增的docker引擎,192.168.1.165是docker引擎在服务器上的IP

证书

如果可行,只需从远程服务器目录 %USERPROFILE%\.docker\machine\machines\<server's local docker engine name> 复制证书(ca.pem、ca-key.pem、cert.pem、key.pem) ] 到本地机器上的相同位置应该保持连接。 不要使用docker-machine regenerate-certs,因为这会禁用其他计算机可能与该docker引擎建立的任何连接,包括服务器本身。

活跃

然后最后激活引擎完成连接。

> IF /F "tokens=*" %G ('docker-machine env vm') do %G

注意:This issue 指出命令 docker-machine create --driver none --url=tcp://192.168.1.165:2376 <name> 也应该添加远程机器的 docker 引擎,如果 "none" 驱动程序在未来的版本中工作.