mirror of
https://github.com/tuxiangxianzhe/NovelWriter_public.git
synced 2026-09-03 06:46:56 +08:00
fix: 用 entrypoint 脚本处理默认数据文件,解决 Docker 部署问题
问题:docker-compose 挂载单文件时,宿主机文件不存在会创建为目录, Dockerfile 构建时也可能因残留目录导致 echo > file 失败。 方案: - 新增 docker-entrypoint.sh:容器启动时检查并创建缺失的默认 JSON 文件, 已有数据不覆盖 - Dockerfile 不再在构建时创建数据文件,改用 ENTRYPOINT 脚本 - docker-compose 默认不挂载单文件(避免目录/文件类型冲突), 注释中说明如何手动启用持久化 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,3 @@ node_modules
|
||||
frontend/node_modules
|
||||
frontend/dist
|
||||
.claude
|
||||
projects.json
|
||||
xp_presets.json
|
||||
config.json
|
||||
|
||||
@@ -40,15 +40,14 @@ COPY . .
|
||||
# 复制前端构建产物
|
||||
COPY --from=frontend-builder /app/frontend/dist /app/frontend/dist
|
||||
|
||||
# 创建数据目录和默认数据文件(rm -rf 防止旧版挂载残留的同名目录)
|
||||
RUN mkdir -p /app/output /app/styles /app/prompts \
|
||||
&& rm -rf /app/projects.json /app/xp_presets.json \
|
||||
&& echo '{"projects":{},"active_project":""}' > /app/projects.json \
|
||||
&& echo '[]' > /app/xp_presets.json
|
||||
# 启动入口脚本(负责创建缺失的默认数据文件,不覆盖已有数据)
|
||||
COPY docker-entrypoint.sh /app/docker-entrypoint.sh
|
||||
RUN chmod +x /app/docker-entrypoint.sh
|
||||
|
||||
EXPOSE 7860
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \
|
||||
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:7860/api/health')" || exit 1
|
||||
|
||||
ENTRYPOINT ["/app/docker-entrypoint.sh"]
|
||||
CMD ["uvicorn", "api_server:app", "--host", "0.0.0.0", "--port", "7860"]
|
||||
|
||||
@@ -9,6 +9,11 @@ services:
|
||||
- ./styles:/app/styles
|
||||
- ./prompts:/app/prompts
|
||||
- ./vectorstore:/app/vectorstore
|
||||
# 如需持久化配置(容器重建后保留),先手动创建文件再取消注释:
|
||||
# touch config.json projects.json xp_presets.json
|
||||
# - ./config.json:/app/config.json
|
||||
# - ./projects.json:/app/projects.json
|
||||
# - ./xp_presets.json:/app/xp_presets.json
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
restart: unless-stopped
|
||||
|
||||
10
docker-entrypoint.sh
Executable file
10
docker-entrypoint.sh
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
# 容器启动前确保运行时数据文件存在(不覆盖已有数据)
|
||||
|
||||
[ -f /app/config.json ] || echo '{}' > /app/config.json
|
||||
[ -f /app/projects.json ] || echo '{"projects":{},"active_project":""}' > /app/projects.json
|
||||
[ -f /app/xp_presets.json ] || echo '[]' > /app/xp_presets.json
|
||||
|
||||
mkdir -p /app/output /app/styles /app/prompts
|
||||
|
||||
exec "$@"
|
||||
Reference in New Issue
Block a user