You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab构建Strapi镜像时Docker Compose报错:无效引用格式

问题分析与解决

错误原因

  1. ARG变量作用域问题:你在第一个FROM strapi/base之后定义ARG NODE_VERSION=18.20.3,但Dockerfile中ARG的作用域仅从定义处开始到当前构建阶段结束。第二个FROM node:${NODE_VERSION}-alpine属于新的构建阶段,此时${NODE_VERSION}未被赋值,最终变成node:-alpine,触发无效镜像引用格式错误。
  2. 构建阶段引用错误:Dockerfile中最后COPY --from=build /usr/src/app/.strapi ./.strapi里的build阶段不存在——你在deps阶段执行了yarn run build,但未将该阶段命名为build,导致后续无法引用。

修正后的Dockerfile

# syntax=docker/dockerfile:1
# 将ARG移到最顶部,确保所有构建阶段都能访问该变量
ARG NODE_VERSION=18.20.3

# 移除未被使用的strapi/base镜像引用,避免阶段混淆
# FROM strapi/base

# 定义基础镜像阶段
FROM node:${NODE_VERSION}-alpine as base
WORKDIR /usr/src/app

# 安装生产依赖阶段
FROM base as deps
RUN --mount=type=bind,source=package.json,target=package.json \
    --mount=type=bind,source=yarn.lock,target=yarn.lock \
    --mount=type=cache,target=/root/.yarn \
    yarn install --production --frozen-lockfile

# 构建应用阶段
FROM base as build
RUN --mount=type=bind,source=package.json,target=package.json \
    --mount=type=bind,source=yarn.lock,target=yarn.lock \
    --mount=type=cache,target=/root/.yarn \
    yarn install --frozen-lockfile

COPY . .
RUN yarn run build

# 最终镜像阶段
FROM base as final
ENV NODE_ENV production

USER node

COPY package.json .

# 从正确阶段复制依赖与构建产物
COPY --from=deps /usr/src/app/node_modules ./node_modules
COPY --from=build /usr/src/app/.strapi ./.strapi

EXPOSE 1337
CMD yarn start

额外说明

  • 拆分deps和build阶段,符合多阶段构建最佳实践,可有效减少最终镜像体积。
  • 移除无用的strapi/base镜像引用,避免不必要的镜像拉取和资源浪费。

内容的提问来源于stack exchange,提问作者Cinzia Nicoletti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:00:04