Windows环境Docker运行Prometheus示例时绑定挂载路径报错求助
嘿,我来帮你搞定这个Docker Swarm挂载的问题!咱们一步步拆解:
第一个报错的根源:路径格式不兼容
你遇到的invalid mount config for type "bind": bind source path does not exist,本质是Windows路径格式在Docker Swarm的Linux容器模式下不被识别。
虽然PowerShell的Test-Path能找到C:/temp/prometheus.yml,但Docker Swarm(尤其是用WSL2后端的Linux容器)是跑在类Unix环境里的,它不认Windows风格的盘符路径,得用WSL的路径格式:把C:/xxx改成/mnt/c/xxx。
另外还要确认Docker Desktop的文件共享设置已经开启了C盘的共享(在Docker Desktop设置→Resources→File Sharing里勾选C盘),不然Docker没权限访问主机文件。
第二个报错的根源:混淆了Bind挂载和Volume挂载
你改成volume类型后报错,是因为你把主机文件路径直接当成了Volume名称——Docker Volume的命名规则很严格,不能有冒号、斜杠这些特殊字符,而且Volume是Docker管理的独立存储卷,不是用来直接挂载主机文件的,挂载主机文件必须用bind类型。
修正后的命令
如果你的Docker用的是默认的Linux容器模式,执行这条命令:
docker service create --replicas 1 --name my-prometheus ` --mount type=bind,source="/mnt/c/temp/prometheus.yml",destination=/etc/prometheus/prometheus.yml ` --publish published=9090,target=9090,protocol=tcp ` prom/prometheus
要是你用的是Windows容器模式(不推荐,因为prom/prometheus是Linux镜像,大概率不兼容),路径要换成Windows原生格式并转义:
docker service create --replicas 1 --name my-prometheus ` --mount type=bind,source='C:\temp\prometheus.yml',destination=C:\etc\prometheus\prometheus.yml ` --publish published=9090,target=9090,protocol=tcp ` prom/prometheus
额外检查点
- 确保
prometheus.yml文件的内容符合Prometheus的配置规范,避免后续启动报错 - 如果是单节点Swarm,也要确保路径在当前节点上确实存在(用WSL终端执行
ls /mnt/c/temp/prometheus.yml验证)
内容的提问来源于stack exchange,提问作者Wouter de Kort
相关产品推荐
相关产品推荐

