multiarch builder 嵌套创建构建容器在受限环境报 "can't mask dir /proc/acpi";本地单架构无需 buildx,直接 docker build 更稳。 多架构 --push 路径保持不变(仍须 docker-container builder) Co-Authored-By: Claude <noreply@anthropic.com>
73 lines
2.1 KiB
Bash
Executable File
73 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
DOCKER_USER="${DOCKER_USER:-openteam}"
|
||
VERSION="${VERSION:-$(git describe --tags --always 2>/dev/null || echo latest)}"
|
||
PLATFORMS="linux/amd64,linux/arm64"
|
||
|
||
# --local:本地构建不推送(默认 docker driver,单架构,tag 不带仓库前缀)。
|
||
# 不用 buildx docker-container builder——嵌套创建容器在受限环境会报
|
||
# "can't mask dir /proc/acpi",普通 docker build 无此问题。
|
||
if [[ "${1:-}" == "--local" ]]; then
|
||
LOCAL=1
|
||
else
|
||
LOCAL=0
|
||
fi
|
||
if [[ $# -gt 1 || ( $# -eq 1 && "$1" != "--local" ) ]]; then
|
||
echo "用法: $0 [--local]" >&2
|
||
exit 1
|
||
fi
|
||
|
||
native_arch() {
|
||
case "$(uname -m)" in
|
||
x86_64|amd64) echo "linux/amd64" ;;
|
||
aarch64|arm64) echo "linux/arm64" ;;
|
||
*) echo "linux/$(uname -m)" ;;
|
||
esac
|
||
}
|
||
|
||
# ---------- 本地模式:单架构,加载到本地 docker ----------
|
||
if [[ $LOCAL -eq 1 ]]; then
|
||
PLATFORM="$(native_arch)"
|
||
echo ""
|
||
echo "========================================"
|
||
echo "🚀 本地构建 openteam (${PLATFORM})"
|
||
echo " tag: openteam:${VERSION}"
|
||
echo "========================================"
|
||
docker build \
|
||
-t "openteam:${VERSION}" \
|
||
-t "openteam:latest" \
|
||
.
|
||
echo ""
|
||
echo "✅ 完成!openteam:${VERSION}(已加载到本地 docker)"
|
||
exit 0
|
||
fi
|
||
|
||
# ---------- 多架构推送模式:需要 buildx docker-container builder ----------
|
||
if ! docker buildx version &>/dev/null; then
|
||
echo "❌ docker buildx 不可用"
|
||
exit 1
|
||
fi
|
||
|
||
if ! docker buildx inspect multiarch &>/dev/null 2>&1; then
|
||
echo "🔧 创建 multiarch builder..."
|
||
docker buildx create --name multiarch --driver docker-container --use
|
||
else
|
||
docker buildx use multiarch
|
||
fi
|
||
docker buildx inspect --bootstrap
|
||
|
||
echo ""
|
||
echo "========================================"
|
||
echo "🚀 构建 openteam (${PLATFORMS})"
|
||
echo " tag: ${DOCKER_USER}/openteam:${VERSION}"
|
||
echo "========================================"
|
||
docker buildx build \
|
||
--platform "${PLATFORMS}" \
|
||
-t "${DOCKER_USER}/openteam:${VERSION}" \
|
||
-t "${DOCKER_USER}/openteam:latest" \
|
||
--push \
|
||
.
|
||
echo ""
|
||
echo "✅ 完成!${DOCKER_USER}/openteam:${VERSION}"
|