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

SvelteKit Adapter-Node Docker卷无法提供构建后新增静态文件问题

SvelteKit Docker生产环境动态静态文件404问题解决

问题根源

SvelteKit执行npm run build时,会将项目根目录static文件夹的内容复制到build/static;生产环境运行node build时,服务仅从build/static读取静态文件。你将主机static挂载到容器/app/static,运行时新增的文件存于/app/static,但服务不会自动同步到build/static,因此返回404。

解决方案

方案一:直接挂载到构建后静态目录

修改docker-compose.yaml的volumes配置,将主机static挂载到容器的/app/build/static:

volumes:
  - ./static:/app/build/static

⚠️ 注意:容器启动时,挂载的卷会覆盖build/static原有内容。若需保留构建时的静态文件(如robots.txt),需确保主机static目录包含这些文件,或构建后将build/static内容同步到主机目录。

方案二:配置SvelteKit服务额外静态目录

通过自定义中间件,让生产服务器同时读取/app/static目录的文件:

  1. 安装依赖:
npm install express
  1. 修改svelte.config.js:
import adapter from '@sveltejs/adapter-node';
import express from 'express';

/** @type {import('@sveltejs/kit').Config} */
const config = {
	kit: {
		adapter: adapter({
			serverMiddleware: [
				// 服务/app/static目录,路由前缀为/,访问/test.txt将读取/app/static/test.txt
				express.static('/app/static')
			]
		})
	}
};

export default config;

配置后,生产服务器会同时处理build/static和/app/static的文件,运行时新增的文件可直接访问。

方案三:定时同步静态文件

保留原挂载配置,添加定时同步脚本,将/app/static的文件同步到/app/build/static:
修改docker-compose.yaml的CMD:

CMD ["sh", "-c", "while true; do cp -r /app/static/* /app/build/static/; sleep 10; done & node build"]

该脚本每隔10秒同步一次目录,新增文件会被复制到服务读取的目录中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:43:23