
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Dockle 是一款专注于容器镜像安全和最佳实践的检查工具,帮助开发者构建安全、合规的 Docker 镜像。它支持 CIS 基准检查,能够检测镜像中的安全隐患和不符合最佳实践的配置,适用于集成到 CI/CD 流程中,实现 DevSecOps 自动化检查。
| 工具 | 检查目标 | 运行方式 | 依赖 | 适合 CI | 主要用途 |
|---|---|---|---|---|---|
| Dockle | 镜像 | 二进制程序 | 无 | ✓ | 安全审计、Dockerfile 检查 |
| Hadolint | Dockerfile | 二进制程序 | 无 | ✓ | Dockerfile 语法检查 |
| Docker Bench for Security | 主机、Docker 守护进程、镜像、容器运行时 | Shell 脚本 | 部分依赖 | ✗ | 安全审计、Dockerfile 检查 |
| Clair | 镜像 | 二进制程序 | 无 | ✗ | 漏洞扫描 |
bash# 若使用 0.1.16 或更早版本,先执行以下命令 brew untap goodwithtech/dockle # 安装最新版本 brew install goodwithtech/r/dockle
bashVERSION=$(curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/') && rpm -ivh https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.rpm
bashVERSION=$(curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/') && curl -L -o dockle.deb https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.deb sudo dpkg -i dockle.deb && rm dockle.deb
可通过 AUR 安装 dockle-bin 包:
bashpikaur -Sy dockle-bin # 或 yay -Sy dockle-bin
bashVERSION=$(curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/') && curl -L -o dockle.zip https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Windows-64bit.zip unzip dockle.zip && rm dockle.zip ./dockle.exe [镜像名称]
从 https://github.com/goodwithtech/dockle/releases/latest 下载对应操作系统/架构的二进制包,解压后将可执行文件放入 $PATH 目录(如 Unix 系统的 /usr/local/bin),并赋予执行权限:
bashchmod +x dockle
bashGO111MODULE=off go get github.com/goodwithtech/dockle/cmd/dockle cd $GOPATH/src/github.com/goodwithtech/dockle && GO111MODULE=on go build -o $GOPATH/bin/dockle cmd/dockle/main.go
bashVERSION=$(curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/') && docker run --rm -v /var/run/docker.sock:/var/run/docker.sock goodwithtech/dockle:v${VERSION} [镜像名称]
若需扫描本地主机上的镜像,需挂载 Docker 套接字:
-v /var/run/docker.sock:/var/run/docker.sock
直接指定镜像名称(及标签)即可执行检查:
bashdockle [镜像名称]
FATAL - CIS-DI-0009: Dockerfile 中应使用 COPY 而非 ADD * 使用 COPY : /bin/sh -c #(nop) ADD file:81c0a803075715d1a6b4f75a29f8a01b21cc170cfc1bff6702317d1be2fe71a3 in /app/credentials.json FATAL - CIS-DI-0010: 不要在环境变量/文件中存储凭证 * 发现可疑文件 : app/credentials.json FATAL - DKL-DI-0005: 清理 apt-get 缓存 * 在 'apt-get install' 后使用 'rm -rf /var/lib/apt/lists' : /bin/sh -c apt-get update && apt-get install -y git FATAL - DKL-LI-0001: 避免空密码 * 发现无密码用户! 用户名 : nopasswd WARN - CIS-DI-0001: 为容器创建用户 * 最后一个用户不应为 root INFO - CIS-DI-0005: 启用 Docker 内容信任 * 在 docker pull/build 前执行 'export DOCKER_CONTENT_TRUST=1'
bashexport DOCKLE_LATEST=$(curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/') docker run --rm goodwithtech/dockle:v${DOCKLE_LATEST} [镜像名称]
| 代码 | 描述 | 级别 |
|---|---|---|
| CIS Docker 镜像检查点 | ||
| CIS-DI-0001 | 为容器创建用户 | WARN |
| CIS-DI-0002 | 使用可信基础镜像 | FATAL |
| CIS-DI-0003 | 不安装不必要的包 | FATAL |
| CIS-DI-0004 | 扫描并重建镜像以包含安全补丁 | FATAL |
| CIS-DI-0005 | 启用 Docker 内容信任 | INFO |
| CIS-DI-0006 | 为镜像添加 HEALTHCHECK 指令 | WARN |
| CIS-DI-0007 | 不要在 Dockerfile 中单独使用 update 指令 | FATAL |
| CIS-DI-0008 | 确认 setuid/setgid 文件安全性 | INFO |
| CIS-DI-0009 | 使用 COPY 而非 ADD | FATAL |
| CIS-DI-0010 | 不在 Dockerfile 中存储密钥 | FATAL |
| CIS-DI-0011 | 仅安装已验证的包 | INFO |
| Dockle Docker 检查点 | ||
| DKL-DI-0001 | 避免使用 sudo 命令 | FATAL |
| DKL-DI-0002 | 避免敏感目录挂载 | FATAL |
| DKL-DI-0003 | 避免使用 apt-get upgrade/apk upgrade/dist-upgrade | FATAL |
| DKL-DI-0004 | 使用 apk add 时添加 --no-cache | FATAL |
| DKL-DI-0005 | 清理 apt-get 缓存 | FATAL |
| DKL-DI-0006 | 避免使用 latest 标签 | WARN |
| Dockle Linux 检查点 | ||
| DKL-LI-0001 | 避免空密码 | FATAL |
| DKL-LI-0002 | UID/GID 应唯一 | FATAL |
| DKL-LI-0003 | 仅包含必要文件 | INFO |
| 级别 | 描述 |
|---|---|
| FATAL | 严重问题,需立即修复 |
| WARN | 警告,建议修复但有例外场景 |
| INFO | 信息性提示,可能影响实用性或性能 |
| SKIP | 未找到目标文件,跳过检查 |
| PASS | 未发现问题 |
bashdockle goodwithtech/test-image:v1
bashdocker save alpine:latest -o alpine.tar dockle --input alpine.tar
bash# 直接输出 JSON dockle -f json goodwithtech/test-image:v1 # 保存 JSON 结果到文件 dockle -f json -o results.json goodwithtech/test-image:v1
json{ "summary": { "fatal": 6, "warn": 2, "info": 2, "pass": 7 }, "details": [ { "code": "CIS-DI-0001", "title": "为容器创建用户", "level": "WARN", "alerts": [ "最后一个用户不应为 root" ] }, { "code": "CIS-DI-0005", "title": "启用 Docker 内容信任", "level": "INFO", "alerts": [ "在 docker pull/build 前执行 'export DOCKER_CONTENT_TRUST=1'" ] } ] }
默认情况下,即使发现问题,Dockle 也会以 0 退出。使用 --exit-code 选项可在发现 WARN 或 FATAL 级别问题时返回非零退出码:
bashdockle --exit-code 1 [镜像名称]
使用 --exit-level 选项可指定触发退出码的检查级别(info、warn 或 fatal):
bash# 当存在 INFO 及以上级别问题时退出码为 1 dockle --exit-code 1 --exit-level info [镜像名称] # 仅当存在 FATAL 级别问题时退出码为 1 dockle --exit-code 1 --exit-level fatal [镜像名称]
使用 --ignore 选项或 .dockleignore 文件可忽略指定检查点:
bash# 命令行忽略 dockle -i CIS-DI-0001 -i DKL-DI-0006 [镜像名称] # 或使用 .dockleignore 文件 cat .dockleignore # 因需以 root 运行 nginx,忽略 CIS-DI-0001 CIS-DI-0001 # 因仅检查镜像内部,使用 latest 标签,忽略 DKL-DI-0006 DKL-DI-0006
yamlservices: - docker env: global: - COMMIT=${TRAVIS_COMMIT::8} before_install: - docker build -t dockle-ci-test:${COMMIT} . - export VERSION=$(curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/') - wget https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.tar.gz - tar zxvf dockle_${VERSION}_Linux-64bit.tar.gz script: - ./dockle dockle-ci-test:${COMMIT} - ./dockle --exit-code 1 dockle-ci-test:${COMMIT}
yamljobs: build: docker: - image: docker:18.09-git steps: - checkout - setup_remote_docker - run: name: 构建镜像 command: docker build -t dockle-ci-test:${CIRCLE_SHA1} . - run: name: 安装 Dockle command: | apk add --update curl VERSION=$( curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | \ grep '"tag_name":' | \ sed -E 's/.*"v([^"]+)".*/\1/' ) wget https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.tar.gz tar zxvf dockle_${VERSION}_Linux-64bit.tar.gz mv dockle /usr/local/bin - run: name: 扫描本地镜像 command: dockle --exit-code 1 dockle-ci-test:${CIRCLE_SHA1} workflows: version: 2 release: jobs: - build
yamlimage: docker:stable stages: - test variables: DOCKER_HOST: tcp://docker:2375/ DOCKER_DRIVER: overlay2 services: - docker:dind unit_test: stage: test before_script: - apk -Uuv add bash git curl tar sed grep script: - docker build -t dockle-ci-test:${CI_COMMIT_SHORT_SHA} . - | VERSION=$( curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | \ grep '"tag_name":' | \ sed -E 's/.*"v([^"]+)".*/\1/' \ ) && curl -L -o dockle.tar.gz https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.tar.gz && \ tar zxvf dockle.tar.gz - ./dockle --exit-code 1 dockle-ci-test:${CI_COMMIT_SHORT_SHA}
Dockle 支持从私有仓库拉取镜像,无需安装 Docker 或其他工具,只需设置环境变量:
Docker Hub 私有仓库
bashexport DOCKLE_AUTH_URL=https://registry.hub.docker.com export DOCKLE_USERNAME={Docker Hub 用户名} export DOCKLE_PASSWORD={Docker Hub 密码}
Amazon ECR
使用 AWS SDK 环境变量:
bashexport AWS_ACCESS_KEY_ID={AWS 访问密钥} export AWS_SECRET_ACCESS_KEY={AWS 密钥} export AWS_DEFAULT_REGION={AWS 区域}
Google GCR
bash# 需将 DOCKLE_USERNAME 设置为空 export GOOGLE_APPLICATION_CREDENTIALS=/path/to/credential.json export DOCKLE_USERNAME=
私有仓库(BasicAuth)
bashexport DOCKLE_USERNAME={用户名} export DOCKLE_PASSWORD={密码} # 若使用 80 端口,需启用非 SSL 模式 export DOCKLE_NON_SSL=true
完整检查点说明请参见 https://github.com/goodwithtech/dockle/blob/master/CHECKPOINT.md%EF%BC%8C%E5%8C%85%E6%8B%AC%EF%BC%9A
AGPLv3
https://github.com/tomoyamachi (Tomoya Amachi)
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务