跳到主要内容

在 Docker 中运行

在 splunk/splunk 容器中保持许可指纹不变:固定 machine-id、持久化 /opt/splunk/etc、固定 MAC。

许可绑定主机指纹,指纹由 /etc/machine-id(或 /sys/class/dmi/id/product_uuid)和 Splunk 实例 GUID($SPLUNK_HOME/etc/instance.cfg)决定,没有 machine-id 时计入网卡 MAC。官方 splunk/splunk 镜像的 /etc/machine-id 为空,容器通常也读不到可用的 MAC。2.0.10 及更早版本在这种容器中激活失败;2.0.11 起改用 App 目录中保存的随机主机标识,可以正常激活。

该标识随 App 目录存在:卸载或删除 App、更换 /opt/splunk/etc 卷后,指纹都会改变。容器部署仍应挂载一个固定的 machine-id 文件,并把 /opt/splunk/etc 放在持久卷上。Splunk 的 Docker 部署本身也要求持久化该目录。

准备 machine-id 文件

在 Docker 主机上生成一次,长期保留并备份。文件内容为 32 个小写十六进制字符。

  • Linux 主机:沿用主机自己的 /etc/machine-id,或另建一个。
  • Docker Desktop(Windows、macOS):用下面的命令生成。
# Linux、macOS 终端,或 Windows 上的 Git Bash
python -c "import uuid; print(uuid.uuid4().hex)" > splunk-machine-id
# PowerShell
python -c "import uuid; print(uuid.uuid4().hex)" | Out-File -Encoding ascii splunk-machine-id

Windows PowerShell 5.1 中不用 > 重定向,它写出 UTF-16 编码,App 无法读取。

也可以让一个运行中的 Splunk 容器生成,保存到主机后供以后的容器挂载(PowerShell 中把 > 换成 | Out-File -Encoding ascii):

docker exec splunk sh -c 'od -An -N16 -tx1 /dev/urandom | tr -d " \n"' > splunk-machine-id

挂载到容器

把文件以只读方式挂载到 /etc/machine-id,/opt/splunk/etc 使用命名卷。

docker run -d --name splunk \
  -v /srv/splunk/machine-id:/etc/machine-id:ro \
  -v splunk-etc:/opt/splunk/etc \
  -e SPLUNK_START_ARGS=--accept-license \
  -e SPLUNK_GENERAL_TERMS=--accept-sgt-current-at-splunk-com \
  -e SPLUNK_PASSWORD=<管理员口令> \
  splunk/splunk:<版本>

docker-compose:

services:
  splunk:
    image: splunk/splunk:<版本>
    environment:
      SPLUNK_START_ARGS: --accept-license
      SPLUNK_GENERAL_TERMS: --accept-sgt-current-at-splunk-com
      SPLUNK_PASSWORD: <管理员口令>
    volumes:
      - ./splunk-machine-id:/etc/machine-id:ro
      - splunk-etc:/opt/splunk/etc
volumes:
  splunk-etc:

在容器内直接写 /etc/machine-id 而不挂载,重建容器后丢失。

重建容器

docker restart 不改变指纹。重建容器(docker rm 后 docker run,或升级镜像后 docker compose up)时,以下条件同时满足,指纹才保持不变:

  • 挂载同一个 machine-id 文件。
  • 复用同一个 /opt/splunk/etc 卷。
  • 没有挂载 machine-id、容器又能读到真实 MAC 时(host 网络,或镜像带网络工具),指纹依赖 MAC:用 --mac-address(compose 中为 mac_address:)固定 MAC,或每次都使用 host 网络。挂载了 machine-id 时,MAC 变化不影响指纹。

2.0.10 及更早版本无论有没有 machine-id 都计入 MAC。这些版本激活的主机升级后旧绑定继续有效;2.0.12 起,在线许可在升级后约 5 分钟内在同一节点内改绑到新指纹。

任一条件不满足,指纹即改变,付费功能锁定。在线许可重新激活,离线许可联系支持重新绑定。

检查指纹

在 产品激活 页的 主机指纹 卡片查看本容器计算出的值(本机标识 · 仅供参考)。重启和升级前后,该值保持一致。

卡片提示「本机读不出硬件指纹(容器里没有 machine-id);离线证无法绑定到这台机器,请在宿主机或有稳定 machine-id 的实例上激活。」时,按上文挂载 machine-id 后重建容器。

本页内容