#!/bin/sh set -eu # 构建前至少保留 1GiB 给业务服务,避免在宿主机内存不足时继续启动构建。 available_kib=$(awk '$1 == "MemAvailable:" { print $2 }' /proc/meminfo) case "$available_kib" in ''|*[!0-9]*) echo 'Cannot read host available memory; build refused.' >&2; exit 69 ;; esac if [ "$available_kib" -lt 4194304 ]; then echo 'Docker build requires at least 4GiB available host memory; retry after resources recover.' >&2 exit 75 fi # 当前节点使用 Docker 26 的经典构建器。显式固定后端,确保资源参数实际生效。 # 限制覆盖每个 RUN 容器,失败时也清理中间容器,超时由宿主机独立终止。 exec env DOCKER_BUILDKIT=0 timeout --signal=TERM --kill-after=30s 15m \ docker build --memory=3g --memory-swap=3g \ --cpu-period=100000 --cpu-quota=200000 --force-rm "$@"