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

如何通过SSH使用Docker Socket 解决无法连接Docker守护进程报错

可以通过SSH隧道安全访问远程Docker Socket

你遇到的报错是Unix域套接字的设计限制导致的,unix:///var/run/docker.sock只能在同一台机器的内核空间内通信,无法直接跨机器调用,按以下步骤配置即可正常使用:

前置检查(远程Ubuntu机器侧)

  • 确认Docker daemon正常运行,执行命令systemctl is-active docker返回active即为正常,如果服务未启动执行sudo systemctl start docker
  • 确认你用于SSH连接的账号已经加入docker用户组,避免需要root权限才能操作socket:
    sudo usermod -aG docker 你的SSH登录用户名
    
    执行后重新登录远程SSH生效。
  • 确认两台机器之间SSH 22端口网络互通,没有被防火墙、安全组拦截。

配置方式

方式1:Docker原生SSH协议访问(推荐,Docker 18.09+版本支持)

Docker客户端从18.09版本开始原生支持通过SSH协议调用远程Docker daemon,不需要手动做端口映射,也不需要暴露Docker的TCP监听端口,安全性最高。
在Jenkins master侧直接配置DOCKER_HOST环境变量即可:

export DOCKER_HOST=ssh://<SSH用户名>@<远程Ubuntu机器IP/域名>

如果需要免密执行,提前把Jenkins运行账号的SSH公钥添加到远程Ubuntu机器对应用户的~/.ssh/authorized_keys文件中即可。配置完成后直接执行docker ps等命令就可以操作远程Docker服务。

方式2:手动SSH端口转发适配低版本Docker

如果你的Docker版本低于18.09,可以通过SSH隧道把远程的Docker socket映射到本地的Unix套接字:

  1. 执行SSH命令建立隧道,保持会话存活:
    ssh -nNT -L /本地自定义路径/docker.sock:/var/run/docker.sock <SSH用户名>@<远程Ubuntu机器IP/域名>
    
  2. 新开终端配置本地Docker客户端指向映射的本地socket:
    export DOCKER_HOST=unix:///本地自定义路径/docker.sock
    

常见问题排查

  • 依旧提示无法连接daemon:先直接登录远程Ubuntu机器执行docker ps确认远程Docker本身运行正常,再检查SSH连接是否存活
  • 权限报错:确认远程SSH用户已经加入docker用户组,本地映射的socket文件权限对Jenkins运行账号开放
  • 连接超时:检查两台机器之间22端口是否连通,远程机器的sshd服务是否正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:27:01