要让 docker 守护进程支持 tls 加密通信,需生成 ca 根证书、服务端证书(server-cert.pem)和服务端私钥(server-key.pem),配置 daemon.json 启用 tls 并监听 2376 端口,客户端还需提供由同一 ca 签发的客户端证书才能完成双向认证。
要让 docker 守护进程(daemon)支持 tls 加密通信,核心是生成并配置三类证书:ca 根证书、服务端证书(server-cert.pem)、服务端私钥(server-key.pem),然后修改 daemon 配置启用 tls 并绑定安全端口。
生成 CA 和服务端证书
在运行 Docker 守护进程的服务器上操作:
- 生成 CA 私钥和自签名根证书:
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem - 生成服务端私钥和证书签名请求(CSR):
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=your-hostname" -sha256 -new -key server-key.pem -out server.csr - 创建 extfile.cnf,填入服务端 IP 和 DNS(如
subjectAltName = IP:192.168.1.100,DNS:docker.example.com),并添加extendedKeyUsage = serverAuth - 用 CA 签发服务端证书:
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf -extensions v3_req
配置 Docker 守护进程启用 TLS
编辑 /etc/docker/daemon.json,写入以下内容(路径按实际证书位置调整):
{
"tls": true,
"tlscert": "/etc/docker/server-cert.pem",
"tlskey": "/etc/docker/server-key.pem",
"tlscacert": "/etc/docker/ca.pem",
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"]
}
注意:
– 必须指定 tcp://0.0.0.0:2376(或具体监听 IP)才能接受远程 TLS 连接;
– 2376 是 Docker 官方推荐的 TLS 端口,不要与非加密的 2375 混用;
– 修改后执行 systemctl restart docker 生效。
验证服务端 TLS 是否就绪
在服务端本机测试:
- 确认端口监听:ss -tlnp | grep :2376
- 用 OpenSSL 测试握手:
openssl s_client -connect localhost:2376 -cafile /etc/docker/ca.pem
若返回Verify return code: 0 (ok),说明证书链可信、TLS 已启用
客户端连接需配套证书
仅服务端配置 TLS 不够——客户端也必须提供由同一 CA 签发的客户端证书,否则连接会被拒绝。你需要为每个客户端生成 client-key.pem + client-cert.pem,并将 ca.pem、client-cert.pem、client-key.pem 一起复制到客户端的 ~/.docker/ 目录下,再通过 DOCKER_HOST=tcp://your-server:2376 和环境变量或命令行参数指定证书路径,才能完成双向认证。











