要让Docker Engine支持远程API访问,核心是配置dockerd监听TCP端口(如2375)而非仅Unix套接字;推荐修改/etc/docker/daemon.json添加"hosts"字段启用tcp://0.0.0.0:2375和unix:///var/run/docker.sock,再重载并重启服务,同时务必启用TLS认证或IP白名单以保障安全。
要让 docker engine 支持远程 api 访问,核心是让 dockerd 守护进程监听 tcp 端口(如 2375),而不仅限于本地 unix 套接字。默认情况下它只监听 unix:///var/run/docker.sock,不对外提供网络接口。配置需修改守护进程启动参数或配置文件,并重启服务。
修改 daemon.json 配置(推荐)
这是最清晰、可维护性最好的方式,避免直接改 systemd 启动命令。
- 编辑或创建
/etc/docker/daemon.json(注意路径是/etc/docker/,不是/usr/lib/systemd/) - 填入以下内容(支持同时保留本地 socket 和开放远程 TCP):
- 保存后执行:
sudo systemctl daemon-reloadsudo systemctl restart docker - 验证是否生效:
sudo ss -tlnp | grep 2375或sudo lsof -i :2375—— 应看到 dockerd 进程在监听
通过 docker.service 文件配置(兼容旧版本)
适用于某些未启用 daemon.json 解析的 Docker 版本(如较老的 18.x 或部分定制发行版)。
- 编辑
/usr/lib/systemd/system/docker.service或/lib/systemd/system/docker.service - 找到
ExecStart=行,在末尾追加:-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock - 重载并重启:
sudo systemctl daemon-reloadsudo systemctl restart docker
测试远程访问是否可用
在服务端或另一台机器上执行以下任一命令,确认基础连通性:
-
curl http://localhost:2375/version(本机测试) -
curl http://<服务器IP>:2375/info(从其他机器测试,需确保防火墙放行 2375 端口) - 使用 Docker CLI 指定远程地址:
docker -H tcp://<服务器IP>:2375 ps
安全提醒(不可跳过)
裸开 2375 端口等于把服务器 root 权限暴露在公网——任何能连上的人都可任意创建容器、读取宿主机文件、甚至逃逸提权。
- 生产环境必须启用 TLS 双向认证:生成 CA、服务端证书、客户端证书,配置
daemon.json中的tlsverify、tlscacert、tlscert、tlskey字段 - 至少用防火墙限制访问源 IP:
sudo ufw allow from 192.168.1.100 to any port 2375 - 禁用密码为空或弱口令的系统账户;Docker 组用户等同于 root 权限


















