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

如何避免Docker Compose启动时清除卷中info.json内容?

解决Docker中ASP.NET应用重置info.json的问题

问题根源分析

你的info.json每次启动被重置为空对象,大概率是以下两个原因之一:

  • ASP.NET应用启动时存在自动初始化逻辑:比如检测到info.json不存在就创建空的{},或者每次启动都会强制重置该文件
  • 宿主机./data目录初始为空,且容器用户(1000:1000)没有足够权限读写该目录,导致应用重新创建空文件

注意:external: true是针对Docker命名卷的配置,你当前使用的是绑定挂载(直接映射宿主机相对路径目录),这个配置对你的场景不适用。

解决方案

1. 检查并修改应用初始化逻辑

首先排查ASP.NET代码:

  • 定位处理info.json的代码段,确认是否存在每次启动都重置文件的逻辑
  • 如果是“文件不存在则创建空文件”的逻辑,修改为仅在首次启动时生成初始数据,或者保留已有的文件内容(若存在)

2. 确保宿主机文件权限正确

容器运行用户是1000:1000,需要确保该用户对宿主机./data目录及其中的info.json有读写权限:

# 递归设置目录所有者为1000:1000
chown -R 1000:1000 ./data
# 递归赋予所有者读写权限
chmod -R u+rw ./data

3. 提前初始化宿主机的info.json

如果宿主机./data目录原本没有info.json,手动创建并写入初始内容(避免应用启动时生成空文件):

# 创建data目录(如果不存在)
mkdir -p ./data
# 写入初始的info.json内容(替换为你的实际元数据)
echo '{"your": "initial", "metadata": "here"}' > ./data/info.json
# 设置文件权限
chown 1000:1000 ./data/info.json
chmod u+rw ./data/info.json

4. 排查Dockerfile是否打包了空文件

检查你的api/Dockerfile,确认是否在构建时将空的info.json复制到了/euphonia/data目录。如果有类似以下命令,删除它:

# 要删除的错误示例
COPY ./empty-info.json /euphonia/data/info.json

绑定挂载会隐藏容器内该目录的原有内容,但如果应用逻辑依赖镜像中的文件存在,可能导致异常。

验证方法

执行上述操作后,先停止容器:

docker compose down

然后重新启动:

docker compose up -d

查看宿主机./data/info.json的内容是否保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:02:44