Docker Compose中如何自定义卷名并指定本地存储路径(WSL环境)
解决方法:自定义命名卷+指定本地存储路径
你的问题根源在于:当前配置里用的是绑定挂载(直接指定宿主机./volumes/volume1路径),而非你在volumes块定义的命名卷,这俩是完全独立的挂载方式,所以命名卷的配置没生效。要同时实现自定义卷名+指定本地存储路径,需要给命名卷配置自定义挂载目录,具体修改如下:
修改后的docker-compose.yml配置
version: '3' services: database1: image: mongo:6 container_name: database1 ports: - "27017:27017" volumes: - vol1:/data/db # 改用命名卷名,而非直接指定本地路径 networks: - test_network database2: image: mongo:6 container_name: database2 ports: - "27018:27017" volumes: - vol2:/data/db # 同上 networks: - test_network volumes: vol1: # 卷名直接设为vol1,对应上面的引用 driver: local driver_opts: type: none device: ${PWD}/volumes/volume1 # WSL下的当前项目绝对路径,自动替换 o: bind vol2: driver: local driver_opts: type: none device: ${PWD}/volumes/volume2 o: bind networks: test_network: driver: bridge
关键说明
- 替换挂载方式:把services里的
./volumes/volume1:/data/db改成vol1:/data/db,这样才会关联你定义的命名卷 - 命名卷绑定本地路径:通过
driver_opts配置,用local驱动将命名卷和指定的本地目录绑定,实现数据存储到你想要的./volumes文件夹下 - WSL路径注意事项:
- 必须在WSL终端里执行
docker-compose命令,${PWD}才会正确解析为WSL下的项目绝对路径 - 不想用环境变量的话,也可以直接写死绝对路径,比如
/home/your_username/your_project/volumes/volume1
- 必须在WSL终端里执行
操作步骤
- 进入WSL的项目目录,先创建本地存储文件夹(避免权限问题):
mkdir -p ./volumes/volume1 ./volumes/volume2 chmod 777 ./volumes/volume1 ./volumes/volume2 # 给Mongo容器写入权限 - 启动容器:
docker-compose up -d - 验证结果:
- 执行
docker volume ls,就能看到vol1和vol2 - 查看
./volumes/volume1目录,会生成Mongo的数据文件
- 执行
内容的提问来源于stack exchange,提问作者JVL
相关产品推荐
相关产品推荐

