GitHub Actions构建Web应用Docker镜像失败及版本标签问题咨询
问题1:GitHub Actions构建Docker时找不到dist目录的路径修正
问题根源
Dockerfile中使用了绝对路径/dist/app-name,Docker构建时会将其解析为系统根目录下的dist路径,而非项目根目录下的构建产物目录。本地构建正常是因为你在项目根目录执行构建,而GitHub Actions的构建上下文同样是项目根,但绝对路径的写法错误导致无法找到目标目录。
修正方案
修改Dockerfile中的COPY路径为相对路径(去掉开头的斜杠):
FROM nginx:1.17.1-alpine COPY nginx.conf /etc/nginx/nginx.conf COPY dist/app-name /usr/share/nginx/html
可选验证步骤
可以在GitHub Actions的npm run build-prod步骤后添加目录检查,确认dist目录生成:
- name: Verify Dist Directory run: ls -la dist/
问题2:构建带版本标签的Docker镜像并保留latest
步骤1:配置Workflow触发条件
让Workflow仅在推送Git版本标签时触发(比如标签格式为v1.0.0),修改Workflow开头:
name: Build and Push Docker Image on: push: tags: - 'v*' # 匹配v开头的版本标签,如v1.0.0、v2.1.3
步骤2:构建双标签镜像
利用GitHub Actions内置变量github.ref_name获取当前推送的标签名,同时为镜像打latest和版本标签:
- name: Build Docker Image run: | docker build . \ --tag ${{ secrets.REPO }}:latest \ --tag ${{ secrets.REPO }}:${{ github.ref_name }}
步骤3:推送双标签镜像
修改推送步骤,同时推送两个标签的镜像:
- name: Push Docker Images run: | docker push ${{ secrets.REPO }}:latest docker push ${{ secrets.REPO }}:${{ github.ref_name }}
注意事项
- 确保
REPO、USERNAME、PWD已在GitHub仓库的Secrets中配置; - 如果需要在普通代码推送时也构建
latest镜像,可以保留原有push触发规则,同时添加标签触发规则。
内容的提问来源于stack exchange,提问作者Chris T
相关产品推荐
相关产品推荐

