Docker Compose中使用MongoDB报错求助:未找到命名卷声明
解决Docker Compose部署MongoDB的命名卷错误
错误原因
你配置的volumes: - mongodb:./mongo格式完全错误:
- Docker Compose中,命名卷的格式是
卷名:容器内目标路径,且命名卷必须在compose文件顶层的volumes段声明 - 你混淆了命名卷和绑定挂载的写法,导致Docker将
./mongo识别为容器内路径,同时认为mongodb是未声明的命名卷,触发报错
解决方案
提供两种常用的挂载方式,选择其一即可:
方案1:本地文件夹绑定挂载(数据存放在宿主机mongo目录)
修改mongo服务的volumes配置,将本地./mongo目录挂载到MongoDB容器默认的数据存储路径/data/db:
version: '3.1' services: mongo: image: mongo restart: always environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: example ports: - '27017:27017' volumes: - ./mongo:/data/db # 修正为绑定挂载格式 store: image: store:0.0.1 ports: - "6381:6381"
方案2:Docker命名卷(数据由Docker管理,稳定性更高)
在compose文件顶层添加volumes段声明mongodb卷,同时修正挂载路径为容器内的/data/db:
version: '3.1' services: mongo: image: mongo restart: always environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: example ports: - '27017:27017' volumes: - mongodb:/data/db # 命名卷指向容器内数据路径 store: image: store:0.0.1 ports: - "6381:6381" # 顶层声明命名卷 volumes: mongodb:
额外注意事项
store服务的Python代码连接MongoDB时,不要使用localhost,直接用服务名mongo作为主机地址,示例代码:
from pymongo import MongoClient # 连接MongoDB服务 client = MongoClient('mongodb://root:example@mongo:27017/')
Docker Compose会自动创建默认网络,服务名可直接解析为对应容器的IP地址。
内容的提问来源于stack exchange,提问作者Lapin
相关产品推荐
相关产品推荐

