WSL环境下用Docker Compose部署Mongo为何生成两个卷?
问题原因分析
官方Mongo镜像的Dockerfile中默认声明了两个VOLUME路径:/data/db和/data/configdb。你在docker-compose.yaml里只挂载了/data/db到命名卷mongo-data,但未处理/data/configdb,Docker会自动为未挂载的VOLUME路径创建匿名卷来持久化数据,这就是额外匿名卷出现的原因。
解决办法
只需在mongodb服务的volumes配置中,为/data/configdb也指定挂载目标即可,以下提供三种可选方案:
方案一:复用同一个命名卷的子路径
将/data/configdb也挂载到已定义的mongo-data卷,Docker会自动在卷内创建子目录区分两个路径:
version: '3' services: mongodb: image: mongo ports: - 27017:27017 environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=password volumes: - mongo-data:/data/db - mongo-data:/data/configdb # 新增这一行 mongo-express: image: mongo-express ports: - 8081:8081 environment: - ME_CONFIG_MONGODB_ADMINUSERNAME=admin - ME_CONFIG_MONGODB_ADMINPASSWORD=password - ME_CONFIG_MONGODB_SERVER=mongodb depends_on: - mongodb volumes: mongo-data: driver: local
方案二:创建独立的命名卷
为/data/configdb单独创建一个命名卷,数据分离更清晰:
version: '3' services: mongodb: image: mongo ports: - 27017:27017 environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=password volumes: - mongo-data:/data/db - mongo-configdb:/data/configdb # 新增这一行 mongo-express: image: mongo-express ports: - 8081:8081 environment: - ME_CONFIG_MONGODB_ADMINUSERNAME=admin - ME_CONFIG_MONGODB_ADMINPASSWORD=password - ME_CONFIG_MONGODB_SERVER=mongodb depends_on: - mongodb volumes: mongo-data: driver: local mongo-configdb: # 新增这个命名卷定义 driver: local
方案三:绑定挂载到WSL本地路径
如果需要直接在WSL Ubuntu的文件系统中访问Mongo的数据文件,可以用绑定挂载(替换为你自己的WSL路径):
version: '3' services: mongodb: image: mongo ports: - 27017:27017 environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=password volumes: - /home/your-username/mongo/data:/data/db # WSL本地路径 - /home/your-username/mongo/config:/data/configdb # 新增这一行 mongo-express: image: mongo-express ports: - 8081:8081 environment: - ME_CONFIG_MONGODB_ADMINUSERNAME=admin - ME_CONFIG_MONGODB_ADMINPASSWORD=password - ME_CONFIG_MONGODB_SERVER=mongodb depends_on: - mongodb
验证方法
修改配置后,执行docker-compose down -v清理旧的卷和容器,再执行docker-compose up -d重新部署。然后用docker volume ls查看,此时应该只有你定义的命名卷,不再生成匿名卷。
内容的提问来源于stack exchange,提问作者Ayles
相关产品推荐
相关产品推荐

