You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows系统下如何让swipely/docker-api连接本地Docker守护进程?

Ruby脚本调用Docker.version挂起的问题排查

先说说我的环境背景:

  • 系统:Windows 10专业版64位
  • Ruby版本:Ruby 1.9.3p545 (2014-02-24) [i386-mingw32]
  • Docker状态:通过Docker安装的docker.exe客户端,在运行Ruby和脚本的同一Shell里,能正常连接DOCKER_HOST=tcp://localhost:2375并执行Docker命令

当前我的脚本内容如下:

require 'docker'
Docker.url='tcp://localhost:2375' # 我也尝试过http://localhost:2375 # 结果相同
Docker.options={}
vers = Docker.version # 此处执行时会挂起

结合这个情况,我整理了几个排查方向,你可以试试:

  • 先排查docker gem的版本兼容性:Ruby 1.9.3是比较老旧的版本了,现在很多新的docker gem版本已经不再支持它。你可以先执行gem list docker看看当前安装的gem版本,如果是较新的版本,建议降级到适配Ruby 1.9.3的版本——比如早期的docker-api gem(注意原先的docker gem后来改名为docker-api),1.34.x系列的版本对老Ruby支持更友好。

  • 用原生HTTP请求测试API连通性:咱们绕开docker gem,直接用Ruby的Net::HTTP发请求测试Docker API,看看能不能拿到响应,这样能区分是gem的问题还是网络问题。写个简单的测试脚本:

require 'net/http'
uri = URI('http://localhost:2375/version')
response = Net::HTTP.get_response(uri)
puts response.body

如果这个脚本能正常返回版本信息,那基本就是docker gem和Ruby 1.9.3的兼容性问题;如果这个也挂起,再去检查Windows防火墙是不是拦截了localhost:2375的请求(不过你用docker.exe能连,大概率不是这个问题)。

  • 检查并禁用代理设置:有时候Ruby会自动继承系统的代理配置,导致请求被卡住。你可以在脚本里加上禁用代理的配置试试:
# 给docker gem设置禁用代理
Docker.options[:proxy] = false
# 或者直接清空环境变量里的代理设置
ENV['http_proxy'] = nil
ENV['https_proxy'] = nil
  • 开启调试日志定位卡点:给docker gem开启调试模式,看看请求的具体流程,到底是没发出去还是卡在等待响应。在脚本开头加上:
require 'logger'
Docker.logger = Logger.new(STDOUT)
Docker.logger.level = Logger::DEBUG

运行脚本后,通过输出的调试日志,就能清楚看到请求的每一步,帮你快速定位问题所在。

内容的提问来源于stack exchange,提问作者peterk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:04:29