要通过daemon.json配置Docker远程API访问,核心是设置hosts字段指定监听地址(如"tcp://192.168.1.100:2375"),禁用0.0.0.0暴露,强制启用TLS加密并配合防火墙IP白名单,实现网络层最小权限控制。
要通过 daemon.json 配置 docker daemon 的远程 api 访问控制策略,核心是明确监听地址、限制访问范围,并配合系统级防护措施。docker 本身不内置用户认证或 rbac,所以“访问控制”主要靠网络层约束 + 加密通信 + 主机防火墙协同实现。
指定监听地址与协议组合
在 /etc/docker/daemon.json 中设置 hosts 字段,决定 daemon 接收哪些连接方式:
-
仅限本地管理 + 特定内网 IP 远程访问:
{"hosts": ["unix:///var/run/docker.sock", "tcp://192.168.1.100:2375"]}(把0.0.0.0换成实际可信的宿主机内网 IP,避免暴露给整个子网) -
保留本地 socket,禁用所有 TCP 远程访问:
删除或不写
tcp://条目,仅保留"unix:///var/run/docker.sock" -
必须开放全网?至少绑定到私有网段接口:
如宿主机有
10.0.2.15(VirtualBox)或172.17.0.1(Docker bridge),可设为"tcp://10.0.2.15:2375"
强制启用 TLS 加密(关键安全步骤)
明文 TCP(如 tcp://0.0.0.0:2375)等同于裸奔,生产环境必须启用 TLS。此时 daemon.json 需补充证书路径:
-
"tls": true— 启用 TLS -
"tlscacert": "/etc/docker/certs/ca.pem"— 根证书位置 -
"tlscert": "/etc/docker/certs/server.pem"— 服务端证书 -
"tlskey": "/etc/docker/certs/server-key.pem"— 服务端私钥 -
"tlsverify": true— 强制客户端校验证书(推荐开启)
配置后,客户端必须用 docker -H tcp://x.x.x.x:2376 --tlsverify ... 连接(注意端口常改为 2376 表示 TLS)。
配合系统防火墙做 IP 白名单
daemon.json 无法过滤 IP,必须靠宿主机防火墙补位:
- CentOS/RHEL(firewalld):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.50" port port="2375" protocol="tcp" accept'firewall-cmd --reload - Ubuntu/Debian(ufw):
ufw allow from 192.168.1.50 to any port 2375 proto tcp
禁止开放 0.0.0.0/0,哪怕在内网也建议精确到运维跳板机或 CI 服务器 IP。
不推荐的“伪控制”写法
以下配置看似限制,实则无效或危险,应避免:
-
"hosts": ["tcp://127.0.0.1:2375"]—— 只监听本地回环,外部根本连不上 -
"hosts": ["tcp://0.0.0.0:2375"]且无 TLS + 无防火墙 —— 等同于把 root 权限交给互联网 - 试图在
daemon.json里写"authz-plugin"或"userland-proxy"控制 API 权限 —— 这些字段不用于访问控制,且插件支持已弃用
真正的最小权限原则,是“默认拒绝 + 显式放行 + 加密传输”,daemon.json 只管“听谁”,不管“信谁”——后者得靠 TLS 和防火墙联手完成。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











