fix: Docker 构建前临时替换 shared 符号链接为实际目录

Docker COPY 无法跟随指向构建上下文外的符号链接,
导致 @shared/* 模块在容器内构建时找不到。
构建前临时替换、构建后恢复。
This commit is contained in:
aiyimickey 2026-07-02 17:01:23 +08:00
parent 01836971e5
commit e2937d0ce1
1 changed files with 16 additions and 0 deletions

View File

@ -464,8 +464,24 @@ build_on_server() {
log "重建容器..." log "重建容器..."
local build_flag="" local build_flag=""
ssh txjp "test -f $REMOTE_DIR/Dockerfile" 2>/dev/null && build_flag="--build" ssh txjp "test -f $REMOTE_DIR/Dockerfile" 2>/dev/null && build_flag="--build"
# Docker 无法跟随指向构建上下文外的符号链接,临时将 shared 符号链接替换为实际目录
ssh txjp "cd $REMOTE_DIR && if [ -L shared ]; then
target=\$(readlink shared)
rm shared
cp -r \$target shared
echo 'shared 符号链接已临时替换为实际目录'
fi"
ssh txjp "cd $REMOTE_DIR && docker compose up -d $build_flag && docker compose restart" ssh txjp "cd $REMOTE_DIR && docker compose up -d $build_flag && docker compose restart"
# 恢复 shared 符号链接(仅当目录非符号链接且上级 shared 存在时)
ssh txjp "cd $REMOTE_DIR && if [ -d shared ] && [ ! -L shared ] && [ -d ../shared ]; then
rm -rf shared
ln -s ../shared shared
echo 'shared 符号链接已恢复'
fi"
# 7. 清理构建产生的悬空镜像和缓存(根据磁盘使用率动态调整) # 7. 清理构建产生的悬空镜像和缓存(根据磁盘使用率动态调整)
log "清理构建缓存..." log "清理构建缓存..."
# 清理悬空镜像(无标签或未被引用的中间层) # 清理悬空镜像(无标签或未被引用的中间层)