@CarlosRafaelRamirez 提到了正确的地方,但我将添加一些细节并提供更详细的分步说明,因为 Windows 开发人员通常不熟悉 Linux 生态系统。
免责声明:以下步骤可以从 Windows 主机访问 Docker Remote API,但请记住两点:
- 这不应该在生产中完成,因为它使 Docker 机器非常不安全。
- 当前的解决方案禁用了大部分
docker-machine
和所有docker
CLI 功能。docker-machine ssh
仍然可以运行,迫使一个人通过 SSH 进入 docker 机器以访问docker
命令。
解决方案
现在,这里是将 Docker API 切换到非 TLS 端口所需的步骤。(Docker 机器名称假定为“默认”。如果您的机器名称有不同的名称,则需要在下面的命令中指定它。)
- 启动“Docker 快速入门终端”。它启动 Bash shell,是运行以下所有命令的地方。运行
docker-machine ip
命令并记下 docker 主机的 IP 地址。然后做
docker-machine ssh
cd /var/lib/boot2docker
sudo vi profile
这会以提升权限模式启动“vi”编辑器,以编辑 Docker 主机设置所在的“配置文件”文件。(如果你是 Windows 用户对 vi 不熟悉,这里是关于它的超级基础速成课程。在 vi 中打开文件时,vi 不处于编辑模式。按“i”进入编辑模式。现在你可以进行更改。所有更改完成后,按Esc
和ZZ
保存更改并退出vi。如果您需要退出vi而不保存更改,Esc
请输入:q!
并按Enter键。“:”打开vi的命令模式,“q! "命令表示不保存退出。详细的vi命令信息在这里。)
- 使用 vi,将 DOCKER_HOST 更改为
DOCKER_HOST='-H tcp://0.0.0.0:2375'
,然后设置DOCKER_TLS=no
。如上所述保存更改。
exit
离开 SSH 会话。
docker-machine restart
在 doocker 机器重新启动后,您将能够访问 docker API URL,如http://dokerMachineIp:2375/containers/json?all=1
,并返回有效的 JSON。
这是实现主要目标所需步骤的结束。
但是,如果此时您尝试运行docker-machine config
or docker images
,您将看到一条错误消息,表明 docker CLI 客户端正在尝试通过旧的端口/TLS 设置访问 Docker,这是可以理解的。不过,我没想到的是,即使在我遵循所有入门指南并运行export DOCKER_HOST=tcp://192.168.99.101:2375
andexport 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
命令。