网络磁盘无法挂载到Astronomer Docker容器?原因及解决方法
我在Windows 11主机的本地网络中有一个网络驱动器(示例地址为10.10.10.10),执行命令:
net use O: \\10.10.10.10\share /user:login "password"
可在资源管理器中正常挂载并登录。但尝试在Astronomer中挂载时,在docker-compose.override.yml中写入:
version: "3.1" services: scheduler: volumes: - nfsmountCC:/mnt/share:rw volumes: nfsmountCC: driver: local driver_opts: type: cifs o: "username=login,password=password,iud=astro,vers=3.0" device: "//10.10.10.10/share"
创建容器时出现错误:
Error: error building, (re)creating or starting project containers: Error response from daemon: error while mounting volume '/var/lib/docker/volumes/work_b6bd7d_nfsmountCC/_data': failed to mount local volume: mount :/share/:/var/lib/docker/volumes/work_b6bd7d_nfsmountCC/_data, data: addr=10.10.10.10: connection refused.
而使用相同卷配置的普通nginx容器(docker-compose.yaml如下)却能正常访问/mnt/share目录下的文件:
services: app: image: nginx:latest volumes: - nfsmountCC:/mnt/share:rw volumes: nfsmountCC: driver: local driver_opts: type: cifs o: "username=login,password=password,vers=3.0" device: "//10.10.10.10/share"
我使用的是带WSL2后端的Docker Desktop,请问为何无法在Astronomer中挂载该磁盘?如何实现可读写的挂载?
核心原因
- 无效配置参数:Astronomer卷配置中的
iud=astro是拼写错误,正确参数应为uid=astro,该错误会导致挂载逻辑异常,触发连接失败。 - 网络隔离差异:Astronomer默认使用自定义Docker网络,而普通nginx容器默认用
bridge网络。WSL2环境中,自定义网络可能无法直接访问Windows主机侧的SMB/CIFS共享,导致连接拒绝。
解决步骤
步骤1:修正参数拼写错误
修改docker-compose.override.yml中的o选项,将错误的iud=astro替换为uid=astro(或直接移除该参数,若无需指定用户ID):
version: "3.1" services: scheduler: volumes: - nfsmountCC:/mnt/share:rw volumes: nfsmountCC: driver: local driver_opts: type: cifs o: "username=login,password=password,uid=astro,vers=3.0" device: "//10.10.10.10/share"
步骤2:统一容器网络模式
如果修正参数后仍报错,为Astronomer的scheduler服务指定与nginx一致的bridge网络模式,确保网络连通性:
version: "3.1" services: scheduler: volumes: - nfsmountCC:/mnt/share:rw network_mode: bridge volumes: nfsmountCC: driver: local driver_opts: type: cifs o: "username=login,password=password,uid=astro,vers=3.0" device: "//10.10.10.10/share"
步骤3:验证WSL2基础连通性
在WSL2终端中手动测试挂载共享,排除底层网络问题:
sudo mount -t cifs //10.10.10.10/share /tmp/testmount -o username=login,password=password,vers=3.0
若挂载失败,需检查:
- Windows防火墙是否允许SMB(端口445)流量
- WSL2网段是否与共享所在网络一致
- 共享权限是否允许WSL2主机访问
步骤4:备选方案:通过Windows映射路径挂载
如果直接CIFS挂载仍有问题,可先在Windows主机用net use挂载共享到O:,再通过WSL2映射Windows盘符后绑定挂载到容器:
- 在WSL2终端挂载Windows盘符:
sudo mkdir /mnt/o sudo mount -t drvfs O: /mnt/o
- 修改
docker-compose.override.yml使用绑定挂载:
version: "3.1" services: scheduler: volumes: - /mnt/o:/mnt/share:rw
内容的提问来源于stack exchange,提问作者Sergey Bakaev Rettley

