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

