要在 Docker 中通过 daemon.json 启用 TLS 安全连接,必须配置 hosts、tls、tlsverify、tlscacert、tlscert 和 tlskey 六项,其中 tlsverify 设为 true 强制双向校验,证书路径须为绝对路径且权限严格(server-key.pem 为 600),最后重载并重启 docker 服务。
要在 docker 中通过 daemon.json 启用 tls 安全连接,核心是让 docker daemon 监听 tcp 端口并强制验证客户端证书——不能只开端口不配证书,否则等于暴露明文 api。
daemon.json 必须包含的 TLS 字段
编辑 /etc/docker/daemon.json,确保包含以下键值(路径必须为绝对路径,且文件权限严格):
-
hosts:至少包含
"tcp://0.0.0.0:2376"(推荐绑定具体 IP 更安全)和"unix:///var/run/docker.sock",保留本地 socket -
tls:设为
true(启用 TLS 协议) -
tlsverify:设为
true(强制双向证书校验,关键!) -
tlscacert:CA 根证书路径,如
"/etc/docker/certs/ca.pem" -
tlscert:服务端证书(含公钥),如
"/etc/docker/certs/server.pem" -
tlskey:服务端私钥,如
"/etc/docker/certs/server-key.pem"
示例配置:
证书路径与权限要求
证书文件必须满足:
- 所有路径为绝对路径,不能用
~或相对路径 -
ca.pem和server.pem权限建议644 -
server-key.pem权限必须为600,且属主为root:docker - 服务端证书的 SAN(Subject Alternative Name)必须包含监听 IP 或域名,例如:
IP:192.168.1.100;否则客户端会因证书校验失败而拒绝连接
配置后必须执行的操作
修改完 daemon.json 后,需重载并重启服务:
sudo systemctl daemon-reloadsudo systemctl restart docker- 检查状态:
sudo systemctl status docker,确认无 TLS 相关报错 - 验证监听:
sudo ss -tlnp | grep :2376,应看到 dockerd 进程监听该端口


















