Docker客户端无法直接穿透访问守护进程,因其本身不提供网络穿透能力;必须配置守护进程监听TCP端口(如修改daemon.json添加tcp://IP:2375),并配合防火墙放行、安全组配置或内网穿透工具(如frp、cpolar)打通网络链路,同时推荐使用SSH隧道或Web代理等更安全的替代方案。
客户端无法直接“穿透”访问守护进程——docker 本身不提供网络穿透能力,所谓“客户端远程访问守护进程”,本质是让守护进程主动监听 tcp 端口并配合网络可达性配置(如端口映射、防火墙放行、反向代理或内网穿透工具),使外部客户端能通过网络连接到该 tcp 接口。
确保守护进程监听 TCP 端口
Docker 默认只监听本地 Unix socket(/var/run/docker.sock),不对外开放。要支持远程客户端(如另一台机器上的 docker -H tcp://xxx)访问,必须修改守护进程配置:
- 编辑 /etc/docker/daemon.json,添加
-H监听地址(推荐显式指定 IP,避免绑定 0.0.0.0):{"hosts": ["unix:///var/run/docker.sock", "tcp://192.168.1.100:2375"]} - 若需 TLS 加密通信(生产环境必备),还需配置
tlsverify、证书路径等字段,不能仅开裸 TCP - 保存后执行
sudo systemctl daemon-reload && sudo systemctl restart docker
打通网络链路:从“可监听”到“可到达”
即使守护进程在 192.168.1.100:2375 监听,客户端仍可能连不上。需逐层确认:
-
宿主机防火墙:开放对应端口(如
sudo ufw allow 2375或iptables -I INPUT -p tcp --dport 2375 -j ACCEPT) - 云服务器安全组 / 路由器端口转发:若服务端在云上,必须在控制台放行该端口;若在家庭宽带内网,则需路由器做端口映射 + 公网 IP 或 DDNS
- 无公网 IP 场景:此时必须借助内网穿透工具(如 nps、frp、cpolar),在有公网 IP 的服务器上部署服务端,在 Docker 主机运行客户端,将本地 2375 映射为一个公网可访问的端口
客户端侧正确连接
远程客户端无需特殊“穿透配置”,只需使用标准 Docker CLI 指向服务端地址:
- 临时方式:
docker -H tcp://your-server-ip:2375 ps - 持久方式:设置环境变量
export DOCKER_HOST=tcp://your-server-ip:2375(注意:跳过 TLS 时存在安全风险) - 若服务端启用了 TLS,客户端还需配置
DOCKER_TLS_VERIFY=1和证书路径(DOCKER_CERT_PATH)
替代方案:不暴露 Docker 守护进程更安全
直接暴露 2375 端口风险极高(等价于赋予远程 root 权限)。更推荐的做法是:
- 用 SSH 隧道中转:
ssh -L 2375:/var/run/docker.sock user@server,然后本地docker -H unix:///var/run/docker.sock即可操作远端 - 封装成 Web API 服务(如 Portainer、自建轻量 HTTP 代理),对请求做鉴权与操作限制
- 通过内网穿透工具仅暴露必要服务(如容器内应用端口),而非 Docker 守护进程本身


















