docker的trust子命令基于tuf协议实现内容信任,需通过docker_content_trust环境变量启用;启用后强制校验镜像签名,支持签名、查看、密钥管理及安全策略。

Docker 的 trust 子命令用于管理镜像的数字签名,实现内容信任(Content Trust),确保拉取和推送的镜像是经过授权、未被篡改的。它基于 The Update Framework(TUF)协议,通过密钥签名机制验证镜像来源与完整性。默认关闭,需显式启用。
启用内容信任
在使用 docker trust 前,必须先开启内容信任。Docker 通过环境变量 DOCKER_CONTENT_TRUST 控制:
- 设为
1或on:启用信任检查(所有pull/push操作将校验签名) - 设为
0或off:禁用(默认行为)
临时启用(当前 shell 有效):
export DOCKER_CONTENT_TRUST=1
永久启用可写入 shell 配置文件(如 ~/.bashrc)。启用后,未签名的镜像将无法 pull,已签名镜像的 push 会自动触发签名流程。
为镜像签名并推送
签名操作由 docker trust sign 完成,本质是为指定镜像标签生成并上传其签名元数据到远程 registry(如 Docker Hub):
- 首次对某仓库签名时,Docker 会自动生成根密钥(root key)和签发密钥(repository key),并提示备份根密钥(
~/.docker/trust/private/root_keys/下的文件) - 执行
docker trust sign username/repo:tag,系统会调用本地私钥对镜像摘要签名,并将签名信息推送到 registry 的_trust元数据服务 - 签名成功后,其他用户在启用
DOCKER_CONTENT_TRUST=1时才能拉取该 tag
例如:docker trust sign myname/nginx:1.25 —— 这会为 myname/nginx 仓库中 1.25 标签的镜像创建签名。
查看和管理信任状态
可用 docker trust inspect 查看镜像的信任信息:
-
docker trust inspect --pretty nginx:显示仓库级签名概览(含哪些 tag 已签名、签名者、过期时间) -
docker trust inspect --signers nginx:列出该仓库的签名者(即拥有签发密钥的账户) -
docker trust inspect --verbose nginx:latest:查看具体 tag 的完整签名链(包括 root、targets、snapshot 等 TUF 角色)
注意:签名信息存储在 registry 后端,不随镜像层传输;inspect 命令从 registry 的信任服务实时获取元数据。
密钥管理与安全注意事项
信任体系依赖密钥安全,关键操作需谨慎:
- 根密钥(root key)是信任锚点,丢失则无法再为该仓库添加新签名者;务必离线备份
- 签发密钥(repository key)控制谁可以为该仓库签名;可通过
docker trust key generate手动管理(较少直接使用) - 撤销签名者:用
docker trust signer remove删除某个公钥对应的签名权限(需 root 密钥授权) - 私钥默认存于
~/.docker/trust/private/,权限应为0700;避免共享或提交到代码库
企业环境中建议结合 Docker Notary Server 或 Harbor 的信任服务进行集中密钥管理和审计。











