通过配置 tls 证书和修改 docker 守护进程的监听地址来实现加密通信。需要在客户端和服务端分别生成 ca 证书、服务端证书及密钥,并在 daemon.json 中设置 tlsverify 为 true,同时指定 tlscacert、tlscert 和 tlskey 的路径,重启服务后 docker 将仅接受经过身份验证的 https 连接。

Docker 守护进程如何配置 TLS 参数
在 Linux 系统中,Docker 守护进程的配置文件通常位于 /etc/docker/daemon.json。要实现加密,必须修改该文件中的 hosts 字段,添加 tcp://0.0.0.0:2376,并启用 TLS 验证选项。这些参数告诉守护进程监听 TCP 端口并使用指定的证书进行双向认证。

{
"hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"],
"tls": true,
"tlsverify": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server-cert.pem",
"tlskey": "/etc/docker/server-key.pem"
}
上述配置中,tls 开启基础加密,tlsverify 强制客户端提供有效证书。若 tlsverify 为 false,则仅加密但不验证客户端身份。修改完成后需执行 systemctl restart docker 使配置生效。此时,默认端口 2375 不再监听,所有远程调用必须通过 2376 端口且携带证书。
客户端如何建立安全连接
客户端在使用 docker CLI 或 API 时,必须提供与服务器匹配的 CA 证书、客户端证书和私钥。可以通过环境变量或命令行参数传递这些路径。例如,设置 DOCKER_TLS_VERIFY=1 并指定 DOCKER_CERT_PATH 指向包含证书的目录。这样客户端在发起请求时会自动协商 TLS 握手,确保数据传输的机密性和完整性。
Docker Hub (hub.docker.com)。此技能适用于所有 Docker Hub 操作,包括读取、创建、更新和删除数据。只要任务涉及 Docker Hub,就使用此技能。

export DOCKER_HOST=tcp://server-ip:2376 export DOCKER_TLS_VERIFY=1 export DOCKER_CERT_PATH=~/.docker export DOCKER_CA=~/.docker/ca.pem export DOCKER_CERT=~/.docker/cert.pem export DOCKER_KEY=~/.docker/key.pem docker ps
运行 docker ps 时,CLI 会读取环境变量中的证书路径,向服务器发起 HTTPS 请求。如果服务器配置的 tlscacert 与客户端提供的 CA 不匹配,或者客户端证书未被服务器信任,连接将被拒绝。这种机制防止了中间人攻击和未授权访问。建议将证书文件权限设置为 600,仅所有者可读写,以增强安全性。
证书过期对通信的影响
当服务器或客户端的 TLS 证书过期时,Docker 守护进程与客户端之间的通信将立即中断。客户端会收到类似 x509: certificate has expired or is not yet valid 的错误。这是因为 TLS 握手阶段会验证证书的有效期,过期的证书被视为无效凭证。此时,即使网络连接正常,任何 Docker 命令都无法执行。解决方法是重新生成并部署新的证书,更新 daemon.json 中的路径,并重启守护进程。同时,客户端也必须更新其证书存储,确保证书链完整且未过期。定期监控证书有效期是维护 Docker 安全的重要环节。










