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

Github Actions生成dist后传入Dockerfile失败,如何解决?

解决Vite应用容器化中GitHub Actions构建后Docker复制dist失败的问题

我尝试将大型Vite应用容器化,在Dockerfile内执行vite build时出现内存不足(out of memory)错误。于是转到GitHub Actions中执行vite build生成dist文件夹,但现在在Dockerfile中复制该dist文件夹时动作失败。

现有配置

GitHub Actions Workflow

name: Build Image

on:
  push:
    branches: ["Kev-TestImage"]

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [18.x]
        # See supported Node.js release schedule at https://nodejs.org/en/about/releases/

    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: "npm"
      - run: npm install --legacy-peer-deps
      - run: npm run build
      - uses: azure/docker-login@v1
        with:
          login-server: hidden
          username: ${{ secrets.REGISTRY_USERNAME }}
          password: ${{ secrets.REGISTRY_PASSWORD }}

      - run: |
          docker build . -t hidden
          docker push hidden

Dockerfile

FROM node:18-bullseye-slim

WORKDIR /app

COPY package*.json ./

RUN npm install --legacy-peer-deps

# Copy the generated 'dist' folder into the container
COPY dist ./dist
COPY vite.config.ts ./vite.config.ts

EXPOSE 3000

CMD ["npm", "run", "preview"]

错误原因分析

从错误提示(COPY failed: stat /var/lib/docker/tmp/docker-builderxxxx/dist: no such file or directory)来看,核心问题是Docker构建上下文无法获取GitHub Actions中生成的dist文件夹,常见诱因有两个:

  1. 项目根目录的.dockerignore文件中包含dist条目,导致Docker构建时自动忽略该文件夹;
  2. GitHub Actions中npm run build未成功生成dist文件夹,或生成路径不在Docker上下文范围内。

解决方案

1. 检查并修改.dockerignore

打开项目根目录的.dockerignore文件,如果存在dist行,直接删除该条目,确保Docker构建上下文能包含dist文件夹。

2. 验证dist文件夹是否生成

在GitHub Actions的Workflow中添加验证步骤,确认npm run build成功生成dist:

# 在npm run build步骤后添加
- run: ls -la dist

这一步能直观看到dist文件夹是否存在及内部文件情况,若执行失败,需先排查npm run build的报错信息。

3. 优化Dockerfile(可选)

既然已在GitHub Actions中完成构建,Dockerfile无需安装全量依赖,可仅保留预览所需的生产依赖,减少镜像体积:

FROM node:18-bullseye-slim

WORKDIR /app

COPY package*.json ./
# 仅安装生产依赖
RUN npm install --legacy-peer-deps --only=production

# 复制dist文件夹
COPY dist ./dist

# 若npm run preview不需要vite.config.ts,可删除此行
COPY vite.config.ts ./vite.config.ts

EXPOSE 3000

CMD ["npm", "run", "preview"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:10:01