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

Github Actions传参至Docker环节报错:无效引用格式

解决Dockerfile中COPY --from引用动态镜像标签的"invalid reference format"错误

问题原因

Docker在解析COPY --from中的镜像引用时,会在构建初期处理变量替换,你当前的Dockerfile中,虽然声明了ARG COMMIT_HASH,但第二个ARG COMMIT_HASH是在FROM之后,导致COPY --from中的${COMMIT_HASH}无法被正确解析为构建时传入的参数值,从而触发镜像引用格式错误。

解决方案

1. 调整nginx/Dockerfile的ARG声明位置

将ARG COMMIT_HASH放在FROM指令之前,作为全局构建参数,确保它能被COPY --from的镜像引用解析使用:

# 全局构建参数,用于COPY --from的镜像标签
ARG COMMIT_HASH

# Use the official Nginx image from Docker Hub
FROM nginx:1.19-alpine

# 在当前阶段再次声明ARG,以便在容器内设置环境变量
ARG COMMIT_HASH
ENV COMMIT_HASH=${COMMIT_HASH}

# Debug the commit hash
RUN echo "Commit hash is: ${COMMIT_HASH}"

# Remove default nginx static assets
RUN rm -rf /usr/share/nginx/html/*

# Copy custom configuration file from the current directory
COPY ./nginx/default.conf /etc/nginx/conf.d/

# Use COMMIT_HASH to reference the frontend image
COPY --from=***/react_django_frontend:${COMMIT_HASH} /app/build /usr/share/nginx/html

# Expose ports
EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]

2. 验证Github Actions构建命令

你的现有main.yml配置已经正确传递了COMMIT_HASH参数,可保留:

- name: Build and Push Nginx Docker image
        run: |
          echo "COMMIT_HASH=${COMMIT_HASH}"
          docker build --build-arg COMMIT_HASH=${{ env.COMMIT_HASH }} -t ***/react_django_nginx:${{ env.COMMIT_HASH }} ./nginx
          docker push ***/react_django_nginx:${{ env.COMMIT_HASH }}

3. 确认frontend镜像提前构建推送

必须确保***/react_django_frontend:${COMMIT_HASH}镜像在构建nginx镜像前,已成功构建并推送到镜像仓库,你main.yml中OTHER BUILDS FOR backend AND frontend的步骤需在nginx构建步骤之前执行。

关键说明

  • FROM之前的全局ARG会在整个构建流程生效,包括COPY --from的镜像引用解析阶段。
  • FROM之后的ARG是为了在当前容器阶段中使用该参数(比如设置环境变量),二者缺一不可。

内容的提问来源于stack exchange,提问作者Jonathan Torres-Herrera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:46:34