Docker 生产环境之使用可信镜像 - 自动化内容信任(content trust)

本文介绍了如何在Docker环境中配置内容信任,包括通过环境变量提供密码以绕过交互式提示,以及在构建镜像时如何确保镜像是可信的。通过设置DOCKER_CONTENT_TRUST等环境变量,可以实现自动化构建和推送已签名的Docker镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址

获取并构建镜像的自动化系统也可以使用内容信任。任何自动化环境都必须在处理镜像前手动或通过脚本方式设置 DOCKER_CONTENT_TRUST

1. 绕过密码请求

要允许工具打包 docker 并推送可信内容,有两个环境变量允许你提供不需要脚本的密码,或者直接输入密码到:

  • DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE
  • DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE

Docker 会尝试使用这些环境变量值作为密钥的密码。例如,镜像发布者可以导出仓库 targetsnapshot 快照密码:

$  export DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE="u7pEQcGoebUHm6LHe6"
$  export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="l7pEQcTKJjUHm6Lpe4"

然后,在推送新标签时,Docker 客户端不会请求这些值,而是自动签名:

$  docker push docker/trusttest:latest
The push refers to a repository [docker.io/docker/trusttest] (len: 1)
a9539b34a6ab: Image already exists
b3dbab3810fc: Image already exists
latest: digest: sha256:d149ab53f871 size: 3355
Signing and pushing trust metadata

直接使用 Notary 客户端时,它使用 自己的一组环境变量

2. 构建时使用内容信任

可以使用内容信任进行构建。在运行 docker build 命令之前,应该手动或以脚本方式设置环境变量 DOCKER_CONTENT_TRUST。考虑下面的简单 Dockerfile。

FROM docker/trusttest:latest
RUN echo

FROM 标签正在获取已签名的镜像。不能构建具有本地或未签名的 FROM 的镜像。鉴于标签 latest 的内容信任数据存在,以下构建应该成功:

$  docker build -t docker/trusttest:testing .
Using default tag: latest
latest: Pulling from docker/trusttest

b3dbab3810fc: Pull complete
a9539b34a6ab: Pull complete
Digest: sha256:d149ab53f871

如果启用了内容信任,则依赖于没有信任数据的标记的 Dockerfile 构建,会导致构建命令失败(building from a Dockerfile that relies on tag without trust data, causes the build command to fail):

$  docker build -t docker/trusttest:testing .
unable to process Dockerfile: No trust data for notrust
### Docker `trust inspect` 命令的功能与用法 `docker trust inspect` 是 Docker 中用于查看信任策略的详细信息的一个命令。它主要用于检查由 Notary 和 Docker Content Trust (DCT) 配置的信任元数据,这些元数据定义了如何验证镜像签名以及确保镜像的真实性和完整性。 以下是关于该命令的一些重要说明: #### 功能概述 通过执行 `docker trust inspect`,用户可以获得有关特定镜像或其标签的信任配置的信息。这包括签发者、密钥详情以及其他与内容可信度相关的属性。此功能对于企业环境中实施严格的镜像安全控制尤为重要[^1]。 #### 使用方法 基本语法如下所示: ```bash docker trust inspect [OPTIONS] NAME[:TAG|@DIGEST] ``` - **NAME**: 表示要查询的具体镜像名称。 - **TAG 或 DIGEST**: 可选部分;如果省略,则默认显示最新版本的相关信息。 例如,为了获取名为 `myrepo/app` 的镜像及其标记为 `v1.0` 的具体信任设置,可以运行以下命令: ```bash docker trust inspect myrepo/app:v1.0 ``` 此外还可以附加一些选项来调整输出格式或者过滤结果,比如使用 `-j/--json` 参数返回 JSON 格式的原始数据以便于程序解析。 #### 输出解读 典型的响应可能包含以下几个方面: - **Signatures:** 列出了所有有效的数字签名列表连同它们对应的公钥指纹。 - **Roles:** 显示哪些角色被授权签署当前实体(如开发者, CI系统等). - **Expiration Date:** 指定每条记录的有效期限. 以上各项均有助于管理员评估整个供应链的安全状况并及时更新过期凭证[^2]. #### 注意事项 虽然上述介绍涵盖了大部分常规场景下的应用方式,但在实际部署过程中仍需注意以下几点: - 确保目标主机已启用 Docker Content Trust (`export DOCKER_CONTENT_TRUST=1`) 否则即使存在相关联的信任对象也可能无法正常检视. - 对私有注册表的操作前应先完成身份认证过程(`docker login`)以免因权限不足而导致失败. --- ### 示例代码 下面给出一段简单的脚本演示如何自动化提取某个远程存储库下全部可用版本号所关联的信任细节: ```python import subprocess def get_trust_info(repo_name): try: result = subprocess.run(['docker', 'trust', 'inspect', repo_name], capture_output=True, text=True) if result.returncode != 0: raise Exception(f"Error occurred: {result.stderr}") print(result.stdout) except Exception as e: print(e) if __name__ == "__main__": repository = input("Enter the full path of your docker image including registry domain:") get_trust_info(repository) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值