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

如何在Docker中挂载JSON文件并作为C#程序的数据源?

解决Docker挂载data.json并让C#程序正确读取的问题

1. 修正C#程序的文件路径

容器内默认是Linux环境,程序的工作目录(通常为/app)与本地项目工作目录不同,使用相对路径var/data/data.json会导致程序读取镜像中打包的文件,而非挂载的外部文件。必须改用绝对路径指向挂载目标:

var filePath = @"/var/data/data.json";
var json = JsonDocument.Parse(File.ReadAllText(filePath));
var deserialized = json.Deserialize<List<Member>>();

2. 修正Docker Compose的挂载配置

当前配置存在两处问题:Bind mount的source路径错误、混淆了bind mount与named volume的用法,修正如下:

方案一:挂载目录(推荐)

确保主机路径基于docker-compose.yml所在位置,修正后的配置:

version: '2'
networks:
  default:
    ipam:
      driver: default
services:
  myapp:
    image: myapp-image:latest
    ports:
      - '7113:8080'
    networks:
      - default
    volumes:
      - type: bind
        source: ./var/data/  # 主机上data.json所在目录(相对docker-compose.yml的路径)
        target: /var/data/   # 容器内目标目录

方案二:直接挂载单个文件(更精确)

若只需挂载data.json而非整个目录:

version: '2'
networks:
  default:
    ipam:
      driver: default
services:
  myapp:
    image: myapp-image:latest
    ports:
      - '7113:8080'
    networks:
      - default
    volumes:
      - type: bind
        source: ./var/data/data.json  # 主机上data.json的精确路径
        target: /var/data/data.json   # 容器内文件的精确路径

3. 验证挂载有效性

启动容器后,执行以下命令检查容器内文件是否存在:

docker exec -it <容器ID/名称> ls /var/data/

若未找到data.json,排查以下点:

  • 确认Windows Docker Desktop已开启文件共享(Settings > Resources > File Sharing);
  • 主机路径使用正斜杠/,避免Windows反斜杠\的转义问题;
  • 若使用绝对路径,确保路径准确(如C:/projects/myapp/var/data/)。

4. 检查镜像构建逻辑

若Dockerfile中包含COPY var/data/data.json /var/data/命令,会将本地文件打包进镜像。挂载操作会覆盖镜像中的对应文件,只要程序路径指向挂载位置即可,无需删除该命令(若需要默认数据源)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:30:22