docker-compose挂载卷异常:主机目录已创建但容器未写入数据
问题根因
核心问题是挂载路径配置错误。Bitnami 维护的 MongoDB 镜像未使用官方 MongoDB 镜像默认的/data/db作为数据存储目录,其默认持久化路径为/bitnami/mongodb。
你当前的配置将宿主机目录挂载到了容器内一个不会被 MongoDB 进程写入的无效路径:Docker 会按照 bind mount 的规则自动创建你声明的宿主机源目录,但因为容器内的目标挂载点无任何进程写入数据,宿主机目录自然始终为空,也不会有任何读写错误日志——挂载本身是生效的,只是挂错了地方。
你推测的“自动分配临时存储卷”并不成立:如果容器使用了匿名临时卷,你会在挂载信息里看到随机生成的Docker卷ID绑定到MongoDB的实际数据路径,和你声明的/app/local-data挂载互不干扰。
排查验证步骤
- 确认MongoDB实际启动参数
容器启动后执行命令进入容器,查看mongod进程的启动配置:
输出内容中会明确看到docker-compose exec db bash ps aux | grep mongod--dbpath /bitnami/mongodb参数,即为进程实际写入数据的路径。 - 确认无效挂载点状态
在容器内执行ls -la /data/db,会发现该目录为空,无任何MongoDB生成的数据文件,印证该路径未被使用。 - 确认挂载实际生效状态
在宿主机执行命令查看容器挂载详情:
返回结果中可以看到docker inspect <db服务对应的容器ID/名称> | grep -A 15 Mounts/app/local-data确实正确绑定到了容器内的/data/db路径,不存在挂载失效问题。
修复方案
修改docker-compose.yml中的卷挂载配置,将目标路径替换为Bitnami镜像实际使用的数据路径:
version: '3.7' services: db: image: bitnami/mongodb:5.0.6 volumes: - "/app/local-data:/bitnami/mongodb" env_file: ./db/.env
配置修改后执行docker-compose down && docker-compose up -d重建容器,待服务启动完成后查看宿主机/app/local-data目录,即可看到正常生成的WiredTiger存储引擎文件、数据文件、日志索引文件,后续执行up/down操作数据会正常持久化。
提示:所有Bitnami维护的容器镜像,应用数据默认都存放在
/bitnami/<应用名>路径下,和对应软件官方镜像的默认路径普遍存在差异,使用时不要直接套用官方镜像的路径配置。
内容的提问来源于stack exchange,提问作者user8555937
相关产品推荐
相关产品推荐

