Files
WechatOnCloud/scripts/build-local.sh
Gloridust 698f767f82 fix(build): build-local 用 --provenance=false 出单一镜像,避免经典 API 仍解析到旧镜像
Docker 29 + containerd 镜像存储下,plain docker build -t :tag 会生成带 attestation 的
manifest list;docker image inspect / docker run / 面板用的 dockerode 解析 :tag 时不跟到
新 manifest list,仍指向同名旧镜像,导致重建实例还是用旧镜像。加 --provenance/--sbom=false
出单一镜像即可被经典 API 正确解析。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 02:11:47 +08:00

38 lines
2.3 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# 本地构建面板镜像 + 微信实例镜像,打成与 docker-compose.yml 一致的 GHCR 标签。
# 用途GHCR 尚未发布(没打 tag时自测或自托管者想自己构建而非拉取官方镜像。
# 构建完成后直接 `docker compose up -d` 即可compose 默认 pull_policy=missing会优先用本地镜像
#
# 用法:
# ./scripts/build-local.sh # 构建本机架构,标签 latest
# WOC_VERSION=v1.0.0 ./scripts/build-local.sh # 指定标签(需与 .env 的 WOC_VERSION 一致)
set -euo pipefail
OWNER="${WOC_IMAGE_OWNER:-gloridust}"
TAG="${WOC_VERSION:-latest}"
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
# 烤进面板镜像的版本号:设了 WOC_VERSION 就用它(如 v1.2.0),否则用 dev-<短SHA>(本地构建标识)。
# 开发版不是正式发布版,面板「关于」会标「开发版」、不会触发「有新版」红点。
VER="${WOC_VERSION:-dev-$(git -C "$ROOT" rev-parse --short HEAD 2>/dev/null || echo local)}"
PANEL_IMAGE="ghcr.io/${OWNER}/woc-panel:${TAG}"
WECHAT_IMAGE="ghcr.io/${OWNER}/wechat-on-cloud:${TAG}"
# --provenance=false --sbom=false本地构建出「单一镜像」而非带 attestation 的 manifest list。
# 否则在 Docker 29 + containerd 镜像存储下,经典 APIdocker image inspect / docker run / 面板用的
# dockerode解析 :tag 时不会跟到新 manifest list、仍指向同名旧镜像 → 重建实例还是用旧镜像(实测踩过)。
# 面板靠 dockerode 跑实例,故实例镜像尤其必须用这俩参数。
echo "==> 构建面板镜像 ${PANEL_IMAGE} (版本号 ${VER}"
docker build --provenance=false --sbom=false --build-arg "WOC_VERSION=${VER}" -t "${PANEL_IMAGE}" "${ROOT}/panel"
echo "==> 构建微信实例镜像 ${WECHAT_IMAGE}"
docker build --provenance=false --sbom=false -t "${WECHAT_IMAGE}" "${ROOT}/docker"
echo
echo "完成。本地镜像:"
# 注意docker images 只接受一个仓库参数,故用 --filter 各列一次
docker images --filter "reference=${PANEL_IMAGE}" --format ' {{.Repository}}:{{.Tag}} {{.Size}}'
docker images --filter "reference=${WECHAT_IMAGE}" --format ' {{.Repository}}:{{.Tag}} {{.Size}}'
echo
echo "下一步docker compose up -d (记得先把 .env 里 WOC_VERSION 设为 ${TAG}"