puppet/puppet-boltPuppet Bolt 容器镜像是 Puppet Bolt 工具的容器化分发形式,镜像发布于 Docker Hub,标签策略如下:
latest 标签指向最新版本该镜像用于在容器环境中运行 Puppet Bolt 命令,实现对远程目标节点的任务执行、配置管理等操作,无需在主机本地安装 Bolt 依赖。
localhost 目标指向容器内部环境command run、task run 等)从 Docker Hub 拉取最新版镜像:
bashdocker pull puppet/puppet-bolt
独立运行时,localhost 目标对应容器内部环境(非 Docker 主机),可直接执行命令测试容器内系统信息。
bashdocker run puppet/puppet-bolt command run 'cat /etc/os-release' -t localhost
Started on localhost... Finished on localhost: STDOUT: NAME="Ubuntu" VERSION="16.04.6 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.6 LTS" VERSION_ID="16.04" HOME_URL="[***]" SUPPORT_URL="[***]" BUG_REPORT_URL="[***]" VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial Successful on 1 node: localhost Ran on 1 node in 0.00 seconds
无需自定义模块,仅需传递目标节点连接信息时,可通过 BOLT_INVENTORY 环境变量注入清单配置。
yaml--- nodes: - name: pnz2rzpxfzp95hh.delivery.puppetlabs.net # 目标节点名称 alias: docker-example # 别名(用于 -t 参数指定目标) config: transport: ssh # 传输方式:SSH ssh: user: root # SSH 用户名 password: secret-password # SSH 密码 host-key-check: false # 禁用主机密钥检查
通过环境变量传递清单并运行 facts 任务(获取目标节点系统信息):
bashdocker run --env "BOLT_INVENTORY=$(cat Boltdir/inventory.yaml)" puppet/puppet-bolt task run facts -t docker-example
Started on pnz2rzpxfzp95hh.delivery.puppetlabs.net... Finished on pnz2rzpxfzp95hh.delivery.puppetlabs.net: { "os": { "name": "CentOS", "release": { "full": "7.2", "major": "7", "minor": "2" }, "family": "RedHat" } } Successful on 1 node: pnz2rzpxfzp95hh.delivery.puppetlabs.net Ran on 1 node in 0.55 seconds
通过挂载主机的 Bolt 项目目录(Boltdir),使容器可访问自定义模块、配置文件及密钥,适用于需要持久化或动态更新项目内容的场景。
. └── Boltdir ├── bolt.yaml # Bolt 配置文件 ├── inventory.yaml # 目标节点清单 ├── keys # 密钥目录 │ └── id_rsa-acceptance # SSH 私钥 └── site-modules # 自定义模块 └── docker_task # 模块名称 └── tasks └── init.sh # 任务脚本
bolt.yaml(Bolt 配置):
yaml--- log: console: level: notice # 控制台日志级别
inventory.yaml(目标节点清单,注意路径为容器内路径):
yaml--- nodes: - name: pnz2rzpxfzp95hh.delivery.puppetlabs.net alias: docker-example config: transport: ssh ssh: user: root private-key: /Boltdir/keys/id_rsa-acceptance # 容器内私钥路径 host-key-check: false
init.sh(任务脚本示例):
bash#!/bin/bash echo "Message: ${PT_message}" # 输出传入的 message 参数
将主机 Boltdir 挂载到容器 /Boltdir 目录,执行自定义任务:
bashdocker run --mount type=bind,source=/home/cas/working_dir/docker_bolt/Boltdir,destination=/Boltdir puppet/puppet-bolt task run docker_task message=hi -t docker-example
Started on pnz2rzpxfzp95hh.delivery.puppetlabs.net... Finished on pnz2rzpxfzp95hh.delivery.puppetlabs.net: Message: hi { } Successful on 1 node: pnz2rzpxfzp95hh.delivery.puppetlabs.net Ran on 1 node in 0.56 seconds
通过 Dockerfile 构建自定义镜像,将固定配置、模块或密钥集成到镜像中,适用于需要重复使用相同项目内容的场景。
. └── Boltdir ├── bolt.yaml ├── Dockerfile # 自定义 Dockerfile ├── inventory.yaml ├── keys │ └── id_rsa-acceptance └── site-modules └── docker_task └── tasks └── init.sh
DockerfileFROM puppet/puppet-bolt # 基于官方镜像 COPY . /Boltdir # 将当前目录(Boltdir)复制到容器 /Boltdir
bashdocker build . -t my-extended-puppet-bolt # 构建镜像并命名为 my-extended-puppet-bolt
直接运行扩展镜像,无需额外挂载或传递配置:
bashdocker run my-extended-puppet-bolt task run docker_task message=hi -t docker-example
Started on pnz2rzpxfzp95hh.delivery.puppetlabs.net... Finished on pnz2rzpxfzp95hh.delivery.puppetlabs.net: Message: hi { } Successful on 1 node: pnz2rzpxfzp95hh.delivery.puppetlabs.net Ran on 1 node in 0.56 seconds
| 环境变量 | 用途 | 示例值 |
|---|---|---|
BOLT_INVENTORY | 传递目标节点清单配置(YAML格式) | $(cat Boltdir/inventory.yaml) |

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