kumahq/notary-internal本镜像是一个轻量级 Docker 镜像签名仓库,专为管理预览版本和内部标签镜像的签名信息设计。它提供了签名存储、验证、标签分类等核心能力,帮助团队在开发、测试流程中确保镜像的完整性和来源可信,同时支持对内部流转和预览版本的镜像进行精细化管理。
preview-v1.2.3-rc1),支持自动过期清理internal-v1.2.3),支持权限隔离与审计docker pull 时自动校验签名test-staging、test-prod)分类从指定 registry 拉取镜像(需替换 <registry> 和 <tag> 为实际值):
bashdocker pull <registry>/image-signature-repo:preview-internal-<tag>
bashdocker run -d \ --name sig-repo \ -p 8080:8080 \ -v /local/data:/data \ # 持久化存储签名数据 <registry>/image-signature-repo:preview-internal-<tag>
bashdocker run -d \ --name sig-repo \ -p 8080:8080 \ -v /local/data:/data \ -e STORAGE_BACKEND=s3 \ # 使用 S3 存储后端 -e S3_ENDPOINT=[***] \ -e S3_BUCKET=sig-repo-bucket \ -e S3_ACCESS_KEY=AKIAEXAMPLE \ -e S3_SECRET_KEY=secret \ -e AUTH_ENABLED=true \ # 启用基本认证 -e AUTH_USER=admin \ -e AUTH_PASSWORD=secure-pass \ <registry>/image-signature-repo:preview-internal-<tag>
yamlversion: '3.8' services: sig-repo: image: <registry>/image-signature-repo:preview-internal-<tag> container_name: sig-repo ports: - "8080:8080" volumes: - sig-repo-data:/data # 数据卷持久化 environment: - STORAGE_BACKEND=filesystem # 本地文件系统存储 - DATA_DIR=/data # 存储路径(容器内) - PORT=8080 # 服务端口 - LOG_LEVEL=info # 日志级别(debug/info/warn/error) - PREVIEW_TAG_TTL=7d # 预览标签自动过期时间(默认 7 天) - AUTH_ENABLED=true - AUTH_USER=team-admin - AUTH_PASSWORD=team-pass-123 restart: unless-stopped volumes: sig-repo-data: # 定义持久化数据卷
| 环境变量名 | 描述 | 默认值 | 示例值 |
|---|---|---|---|
STORAGE_BACKEND | 签名数据存储后端 | filesystem | filesystem/s3/gcs |
DATA_DIR | 本地存储路径(仅 filesystem 后端) | /data | /var/sig-repo/data |
S3_ENDPOINT | S3 后端服务地址(仅 s3 后端) | - | [***] |
S3_BUCKET | S3 存储桶名称(仅 s3 后端) | - | sig-repo-bucket |
S3_ACCESS_KEY | S3 访问密钥(仅 s3 后端) | - | AKIAEXAMPLE |
S3_SECRET_KEY | S3 密钥(仅 s3 后端) | - | secret-key-123 |
PORT | 服务监听端口 | 8080 | 9000 |
LOG_LEVEL | 日志输出级别 | info | debug/warn/error |
PREVIEW_TAG_TTL | 预览标签自动过期时间(如 7d/30h) | 7d | 3d |
AUTH_ENABLED | 是否启用基本认证 | false | true |
AUTH_USER | 认证用户名(AUTH_ENABLED=true 时必填) | - | admin |
AUTH_PASSWORD | 认证密码(AUTH_ENABLED=true 时必填) | - | secure-pass-456 |
通过 HTTP API 提交镜像签名(需替换 <image-digest>、<tag-type> 等参数):
bashcurl -X POST http://localhost:8080/api/v1/signatures \ -H "Content-Type: application/json" \ -u "admin:secure-pass" \ # 若启用认证 -d '{ "image_digest": "sha256:abc123...", # 镜像唯一 digest "tag": "preview-v1.2.3-rc1", # 镜像标签 "tag_type": "preview", # 标签类型:preview/internal "signature": "base64-encoded-signature...", # 签名内容(base64 编码) "signer": "***", # 签名者信息 "metadata": {"git_commit": "a1b2c3d"} # 附加元数据 }'
查询并验证指定镜像 digest 的签名:
bashcurl -X GET "http://localhost:8080/api/v1/signatures?digest=sha256:abc123..." \ -u "admin:secure-pass"
响应示例:
json{ "digest": "sha256:abc123...", "signatures": [ { "tag": "preview-v1.2.3-rc1", "tag_type": "preview", "signer": "***", "created_at": "2024-05-20T10:30:00Z", "metadata": {"git_commit": "a1b2c3d"}, "is_valid": true } ] }
列出所有内部标签的签名记录:
bashcurl -X GET "http://localhost:8080/api/v1/tags?type=internal" \ -u "admin:secure-pass"
-v 挂载数据卷或配置外部存储后端(如 S3),避免容器重启导致签名数据丢失。AUTH_ENABLED 并使用强密码,建议结合 TLS 加密(通过反向代理如 Nginx 配置 HTTPS)。preview-internal-<tag> 中,<tag> 为版本号,需与 Docker 客户端版本(建议 20.10+)及 Notary 工具(建议 v2.0+)兼容。PREVIEW_TAG_TTL=7d,过期预览标签将自动清理,如需保留历史数据可调整该参数或禁用自动清理(设置 PREVIEW_TAG_TTL=0)。

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务