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
相关产品推荐
相关产品推荐

