如何从运行Docker Toolbox(docker machine)的Windows启用Docker API访问

时间:2016-10-27 21:57:38

标签: windows rest docker windows-7 docker-api

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

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

我从工具箱CLI执行了docker-machine ssh,然后围绕/etc/init.d/docker文件进行了操作,但对文件的更改仍然存在docker-machine restart

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

2 个答案:

答案 0 :(得分:8)

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

免责声明:以下步骤可以从Windows主机点击Docker Remote API,但请记住两件事:

  1. 这不应该在生产中完成,因为它使Docker机器非常不安全。
  2. 当前解决方案会禁用大多数docker-machine和所有docker CLI功能。 docker-machine ssh仍然可以运行,强制一个人通过SSH进入docker机器来访问docker命令。
  3. <强>解决方案 现在,这是将Docker API切换到非TLS端口所需的步骤。 (假定Docker机器名称为&#34;默认为&#34;。如果您的机器名称具有不同的名称,则需要在以下命令中指定它。)

    1. 启动&#34; Docker快速启动终端&#34;。它启动Bash shell,并且是运行所有后续命令的地方。运行docker-machine ip命令并记下docker主机的IP地址。然后做
    2. docker-machine ssh
    3. cd /var/lib/boot2docker
    4. sudo vi profile这开始&#34; vi&#34;编辑所需的高级特权模式编辑&#34; profile&#34;文件,Docker主机设置在哪里。 (如果作为Windows用户,你不熟悉vi,这里就是超级基本速成课程。当文件在vi中打开时,vi不处于编辑模式。按&#34; i&#34 ;开始编辑模式。现在您可以进行更改。完成所有更改后,点击Esc然后ZZ保存更改并退出vi。如果您需要退出vi而不保存更改,请在Esc请输入:q!并按Enter键。&#34;:&#34;启用vi的命令模式,&#34; q!&#34;命令表示退出保存。详细的vi命令信息为here。)
    5. 使用vi,将DOCKER_HOST更改为DOCKER_HOST='-H tcp://0.0.0.0:2375',然后设置DOCKER_TLS=no。如上所述保存更改。
    6. exit离开SSH会话。
    7. docker-machine restart
    8. doocker机器重新启动后,你可以点击docker API URL,如http://dokerMachineIp:2375/containers/json?all=1,并获得有效的JSON。

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

      但是,如果此时您尝试运行docker-machine configdocker images,您将看到一条错误消息,指示docker CLI客户端正在尝试通过旧端口/ TLS设置访问Docker ,这是可以理解的。不过我没想到的是,即使我按照所有Getting Started方向操作,又跑了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连接时出错:检查和/或重新生成证书时出错:验证主机证书时出错   &#34; 192.168.99.101:2376&#34;

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

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

答案 1 :(得分:0)

我遇到了同样的问题,这要归功于@VladH使其不更改任何内部Docker配置文件属性就可以正常工作。您所要做的就是正确定义Windows本地环境变量(或者,如果使用io.fabric8 docker-maven-plugin,则配置maven插件属性)。

请注意,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