核心是双向证书信任:服务端需提供ca签发的服务器证书,客户端需持有该ca根证书并可选配客户端证书;分三步——生成证书(注意san匹配)、配置daemon.json启用tlsverify:true、客户端设置docker_tls_verify与证书路径。
客户端与 docker 守护进程之间配置 tls 加密,核心是双向证书信任:服务端(daemon)需提供由可信 ca 签发的服务器证书,客户端需持有该 ca 的根证书,并可选配客户端证书用于双向认证。整个过程分三步走:生成证书、配置 daemon、配置 client。
一、生成 TLS 证书(CA + server + client)
所有证书建议统一用 4096 位 RSA 密钥,有效期设为 3–5 年。关键点是服务器证书的 CN(Common Name)或 SAN(Subject Alternative Name)必须匹配客户端连接时使用的主机名或 IP,否则握手失败。
- 生成 CA 私钥和自签名根证书:
openssl genrsa -out ca-key.pem 4096openssl req -new -x509 -days 1825 -key ca-key.pem -out ca.pem -subj "/CN=MyDockerCA" - 生成服务器私钥和 CSR(注意替换
$HOST为实际 IP 或域名,如192.168.1.100或docker.example.com):openssl genrsa -out server-key.pem 4096openssl req -subj "/CN=$HOST" -new -key server-key.pem -out server.csr - 用 CA 签发服务器证书(含 SAN 支持,推荐):
echo "subjectAltName = IP:$HOST,DNS:$HOST" > extfile.cnfopenssl x509 -req -days 1825 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf - 生成客户端证书(如需 mTLS):
openssl genrsa -out client-key.pem 4096openssl req -subj '/CN=client' -new -key client-key.pem -out client.csrecho "extendedKeyUsage = clientAuth" > extfile-client.cnfopenssl x509 -req -days 1825 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -extfile extfile-client.cnf
二、配置 Docker 守护进程启用 TLS
修改 /etc/docker/daemon.json,启用 TLS 并指定证书路径。务必保留 unix:///var/run/docker.sock 以兼容本地命令行工具。
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
- 典型配置示例:
{<br> "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"],<br> "tls": true,<br> "tlscert": "/etc/docker/server-cert.pem",<br> "tlskey": "/etc/docker/server-key.pem",<br> "tlscacert": "/etc/docker/ca.pem",<br> "tlsverify": true<br>} - 若使用 systemd,还需检查覆盖配置(
/etc/systemd/system/docker.service.d/override.conf),确保ExecStart指向dockerd且无冲突参数 - 重启生效:
sudo systemctl daemon-reload && sudo systemctl restart docker - 防火墙放行 TCP 2376 端口(仅限可信网络)
三、配置 Docker 客户端信任链
客户端无需安装 Docker 引擎,只需正确放置证书并设置环境变量即可安全连接远程 daemon。
- 将以下三个文件复制到客户端机器(如
~/.docker/certs/):
–ca.pem(CA 根证书)
–client-cert.pem(客户端证书)
–client-key.pem(客户端私钥) - 设置环境变量(Linux/macOS):
export DOCKER_HOST=tcp://<server-ip>:2376</server-ip>export DOCKER_TLS_VERIFY=1export DOCKER_CERT_PATH=$HOME/.docker/certs - 验证是否成功:
docker --tlsverify version应返回远程 daemon 版本信息;docker --tlsverify info | grep "Server Version"可进一步确认 - 如仅需单向认证(服务端验客户端,客户端不验服务端),可省略
client-cert.pem和client-key.pem,但DOCKER_TLS_VERIFY=1和ca.pem不可少
四、常见问题排查要点
TLS 连接失败多数源于证书或配置细节偏差,重点检查:
- 服务器证书中
CN或SAN是否与DOCKER_HOST中的地址完全一致(IP vs 域名、有无端口) -
ca.pem在客户端是否放在DOCKER_CERT_PATH下且权限为644;私钥(client-key.pem)权限必须为600 - 守护进程日志(
journalctl -u docker)是否有x509: certificate is valid for ... not ...类报错 - 客户端执行
openssl s_client -connect <ip>:2376 -CAfile ca.pem</ip>可直连测试 TLS 握手是否通过










