Docker守护进程需显式配置监听TCP端口(如2376)并启用TLS加密才能实现安全远程管理,仅依赖/var/run/docker.sock无法远程访问;须修改systemd服务文件或daemon.json、部署证书、配置docker context并开放防火墙端口。

Docker守护进程本身不直接通过本地Socket文件(/var/run/docker.sock)支持远程管理——这个文件是 Unix 域套接字,仅限本机进程访问。想实现远程管理,必须让守护进程额外监听 TCP 端口(如 tcp://0.0.0.0:2376),而不是依赖 .sock 文件本身“传到远端”。
真正起作用的是:在服务端启用 TCP 监听 + 安全加固(推荐 TLS),再用本地 docker 客户端连接那个 TCP 地址。
下面分几个关键环节说明怎么做:
配置守护进程监听 TCP 端口
Docker 默认只监听 unix:///var/run/docker.sock,需显式添加 TCP 地址。主流方式有两种:
-
修改 systemd service 文件(推荐,兼容性好)
编辑/lib/systemd/system/docker.service,找到ExecStart=行,在其末尾追加:-H fd:// -H tcp://0.0.0.0:2376
若只允许内网访问,把
0.0.0.0换成具体 IP(如192.168.1.10)。 -
通过
daemon.json配合 systemd(部分新版系统支持)
在/etc/docker/daemon.json中写入:{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"] }⚠️ 注意:该写法依赖 systemd 正确解析
hosts字段;若不生效,仍应回退到改 service 文件的方式。
改完后执行:
sudo systemctl daemon-reload sudo systemctl restart docker
必须启用 TLS 加密(生产环境强制要求)
裸开 2375 端口(HTTP)极不安全,官方明确要求生产环境使用 2376 + 双向 TLS:
- 生成 CA、服务端证书(含 SAN)、客户端证书
- 将证书放到服务端固定路径(如
/etc/docker/certs/) - 在
daemon.json中指定 TLS 参数:{ "tls": true, "tlscacert": "/etc/docker/certs/ca.pem", "tlscert": "/etc/docker/certs/server.pem", "tlskey": "/etc/docker/certs/server-key.pem" } - 重启 dockerd 生效
从本地客户端安全连接
不用每次输一长串参数,推荐用 docker context 封装:
docker context create my-remote \ --docker "host=tcp://192.168.1.10:2376,ca=~/certs/ca.pem,cert=~/certs/client.pem,key=~/certs/client-key.pem" docker context use my-remote docker ps # 自动走加密连接
防火墙与验证
- 开放对应端口(如
2376):sudo ufw allow 2376 # 或 firewalld sudo firewall-cmd --add-port=2376/tcp --permanent && sudo firewall-cmd --reload
- 验证服务端是否监听:
sudo ss -tlnp | grep :2376
- 本地测试连通性(未配 TLS 时可临时用):
docker -H tcp://192.168.1.10:2376 version
不复杂但容易忽略











