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

Docker化SvelteKit应用构建失败:build目录未找到,求解决方法

解决Docker构建SvelteKit应用时找不到build目录的问题

核心原因

SvelteKit的构建输出目录由你使用的适配器配置决定,并非所有适配器默认都会输出到build目录;另外也可能是构建命令执行失败,导致目标目录未生成。

排查与解决步骤

1. 确认SvelteKit的构建输出目录

打开项目根目录的svelte.config.js,查看适配器的out配置项:

// svelte.config.js示例
import adapter from '@sveltejs/adapter-node';

export default {
  kit: {
    adapter: adapter({
      out: 'build' // 这里是输出目录,不同适配器默认值不同
    })
  }
};

常用适配器默认输出目录参考:

  • @sveltejs/adapter-node:默认build
  • @sveltejs/adapter-static:默认build
  • @sveltejs/adapter-vercel:无本地输出目录(不适合Docker部署)
  • 自定义适配器:可能使用dist或其他自定义目录

2. 验证builder阶段是否成功生成目录

修改Dockerfile的builder阶段,添加目录查看命令,确认构建是否完成且目标目录存在:

FROM node:19-alpine as builder
RUN npm install -g pnpm

WORKDIR /usr/src/app

COPY package*.json ./
RUN pnpm install

COPY .env ./
COPY . .

RUN pnpm run build
# 新增这行,查看构建后的目录结构
RUN ls -la /usr/src/app

# 后续阶段不变...

重新执行构建命令,查看输出的目录列表,确认是否存在预期的输出目录。如果pnpm run build执行失败,会在这里看到错误日志,优先解决项目本身的构建问题。

3. 修正Dockerfile中的COPY路径

如果确认输出目录不是build(比如是dist),修改stage-1阶段的COPY命令:

# 原错误路径
# COPY --from=builder /usr/src/app/build .
# 修改为实际输出目录,比如dist
COPY --from=builder /usr/src/app/dist .

4. 检查启动命令的正确性

注意:SvelteKit的adapter-node启动入口默认是build/index.js,你的CMD命令直接用index.js,如果COPY时把build目录内容复制到当前工作目录,该命令是可行的;但如果是复制整个build目录到容器中,需要调整CMD为node build/index.js,确保路径对应一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:15:16