根本原因是远程 dockerd 未监听 TCP 端口或网络策略阻断访问;需在服务器配置 -H tcp://0.0.0.0:2375 并重启服务,GoLand 中手动设置 API URL 为 tcp://IP:2375,禁用公网暴露,内网调试优先使用明文端口。

GoLand 连接远程 Docker 报 connection refused 或 timeout
根本原因是远程主机上的 dockerd 没有监听 TCP 端口,或者防火墙/网络策略阻断了访问。GoLand 本身不启动或配置 dockerd,它只是客户端;你必须先在目标服务器上显式开启并加固远程 API 端点。
常见错误现象包括:connection refused(端口未监听)、connection timeout(网络不通或防火墙拦截)、tls handshake timeout(启用了 TLS 但客户端没配证书)。
- 确认远程服务器已安装 Docker 且
dockerd正在运行:systemctl is-active docker - 检查
docker.service文件是否被修改过:sudo systemctl cat docker | grep ExecStart,应看到类似-H tcp://0.0.0.0:2375的参数 - 若只看到
-H fd://或-H unix:///var/run/docker.sock,说明未启用 TCP 监听,需手动改配置 - 执行
sudo ss -tlnp | grep :2375验证端口是否真实监听;若无输出,dockerd没生效
修改 systemd 的 docker.service 启用 tcp://0.0.0.0:2375
直接编辑 /lib/systemd/system/docker.service(部分系统为 /etc/systemd/system/docker.service),找到 ExecStart= 行,替换为双监听模式:
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
⚠️ 注意:不要删掉 unix:// 这一项,否则本地 docker CLI 会失效。
- 改完后必须执行
sudo systemctl daemon-reload,否则systemctl restart docker不会加载新配置 - 重启服务:
sudo systemctl restart docker - 验证是否生效:
curl http://localhost:2375/version应返回 JSON;若报错,检查journalctl -u docker -n 50 --no-pager - 切记:2375 是明文 HTTP 端口,**绝不可暴露在公网**;生产环境务必配合 iptables 或云安全组限制源 IP,例如只允许可信内网段访问
GoLand 中配置 Docker 连接地址为 tcp://IP:2375
在 GoLand 中打开 Settings → Build, Execution, Deployment → Docker,点击 + 添加新配置,选择 TCP socket 类型,填入:
-
API URL:格式为tcp://:2375,例如tcp://192.168.1.100:2375 - 留空
Certificates folder—— 只有启用了 TLS 认证时才需要指定路径 - 点击
Test Connection,成功则显示Connection successful并列出远程镜像
如果测试失败但 curl 在服务器本机能通,大概率是网络层问题:检查 GoLand 所在机器能否 telnet 、云服务器安全组是否放行该端口、中间是否有 NAT 或代理干扰。
为什么不用 2376(TLS 默认端口)?
2376 是 Docker 官方推荐的 TLS 加密端口,但它要求双向证书认证(client + server),配置复杂度陡增:需生成 CA、server cert、client cert,且每个连接客户端都要配对证书路径。对于开发调试或可信内网环境,tcp://:2375 足够轻量;只有当连接跨越不可信网络(如跨公网、多租户 VPC)时,才值得投入精力配 TLS。
容易被忽略的关键点:GoLand 的 Docker 插件不支持自动从 DOCKER_HOST 环境变量读取带 tcp:// 的地址,必须在 UI 里手动填;同时,它也不读取 ~/.docker/config.json 中的上下文配置 —— 所有远程连接都得在 IDE 设置里单独定义。











