繁体   English   中英

如何从运行 Docker 工具箱(docker 机器)的 Windows 启用 Docker API 访问

[英]How to enable Docker API access from Windows running Docker Toolbox (docker machine)

我正在运行最新的 Docker 工具箱,使用最新的 Oracle VirtualBox,并将 Windows 7 作为主机操作系统。

我正在尝试启用对 Docker 远程 API 的非 TLS 访问,因此我可以使用在 Windows 上运行的 Postman REST 客户端并点击在 VirtualBox 中的 docker-machine 上运行的 docker API。 我发现,如果 Docker 配置包含-H tcp://0.0.0.0:2375 ,那么就可以将 API 暴露在-H tcp://0.0.0.0:2375机器的端口 2375 上,但在我的一生中,我找不到此配置的位置存储并可以更改。

我从 Toolbox CLI 执行了docker-machine ssh ,然后去查看/etc/init.d/docker文件,但在docker-machine restart文件没有任何更改。

我能够为 Ubuntu 和 OSX 找到这个问题的答案,但不能为 Windows 找到答案。

@CarlosRafaelRamirez 提到了正确的地方,但我会添加一些细节并提供更详细的分步说明,因为 Windows 开发人员通常不熟悉 Linux 生态系统。

免责声明:以下步骤可以从 Windows 主机访问 Docker 远程 API,但请记住两件事:

  1. 这不应该在生产中完成,因为它使 Docker 机器非常不安全。
  2. 当前解决方案禁用了大部分docker-machine和所有docker CLI 功能。 docker-machine ssh仍可运行,强制通过 SSH 进入 docker 机器以访问docker命令。

解决方案现在,这里是将 Docker API 切换到非 TLS 端口所需的步骤。 (Docker 机器名称假定为“默认”。如果您的机器名称具有不同的名称,则需要在下面的命令中指定它。)

  1. 启动“Docker 快速入门终端”。 它启动 Bash shell,并且是运行以下所有命令的地方。 运行docker-machine ip命令并记下 docker 主机的 IP 地址。 然后做
  2. docker-machine ssh
  3. cd /var/lib/boot2docker
  4. sudo vi profile这将在编辑“profile”文件所需的提升权限模式下启动“vi”编辑器,其中 Docker 主机设置。 (如果作为 Windows 用户,您不熟悉 vi,这里有关于它的超级基础速成课程。在 vi 中打开文件时,vi 未处于编辑模式。按“i”启动编辑模式。现在您可以进行更改。完成所有更改后, Esc然后按ZZ保存更改并退出 vi。如果您需要退出 vi 而不保存更改,请在Esc后键入:q!并按 Enter。“:”打开 vi 的命令模式,“q!”命令表示不保存退出。详细的vi命令信息在这里。)
  5. 使用 vi,将 DOCKER_HOST 更改为DOCKER_HOST='-H tcp://0.0.0.0:2375' ,并设置DOCKER_TLS=no 如上所述保存更改。
  6. exit SSH 会话。
  7. docker-machine restart

docker 机器重新启动后,您应该能够访问http://dokerMachineIp:2375/containers/json?all=1 API URL,例如http://dokerMachineIp:2375/containers/json?all=1 ,并获得有效的 JSON。

这是实现主要目标所需步骤的结束

但是,如果此时您尝试运行docker-machine configdocker images ,您将看到一条错误消息,表明 docker CLI 客户端正在尝试通过旧的端口/TLS 设置访问 Docker,这是可以理解的。 但是,我没想到的是,即使在我遵循所有入门指南并运行export DOCKER_HOST=tcp://192.168.99.101:2375export DOCKER_TLS_VERIFY=0 ,导致

$ env | grep DOCKER
DOCKER_HOST=tcp://192.168.99.101:2375
DOCKER_MACHINE_NAME=default
DOCKER_TLS_VERIFY=0
DOCKER_TOOLBOX_INSTALL_PATH=C:\Program Files\Docker Toolbox
DOCKER_CERT_PATH=C:\Users\USERNAME\.docker\machine\machines\default

结果是一样的:

$ docker-machine env

检查 TLS 连接时出错:检查和/或重新生成证书时出错:验证主机“192.168.99.101:2376”的证书时出错

如果您发现我如何更改环境变量以将 Docker CLI 指向新的 Docker 主机地址的问题,请发表评论。

要解决此问题,请使用docker-machine ssh命令并在此之后运行您的docker命令。

我遇到了同样的问题,多亏了@VladH,它才不会改变任何内部 Docker 配置文件属性。 您所要做的就是正确定义 Windows 本地环境变量(或配置 maven 插件属性,如果您使用 io.fabric8 docker-maven-plugin)。

请注意, 2375端口用于非 TLS 连接,而2376仅用于 TLS 连接。

DOCKER_HOST=tcp://192.168.99.100:2376
DOCKER_TLS_VERIFY=0
DOCKER_TOOLBOX_INSTALL_PATH=C:\Program Files\Docker Toolbox
DOCKER_CERT_PATH=C:\Users\USERNAME\.docker\machine\machines\default

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM