必须将宿主机路径添加到docker desktop的file sharing列表中,否则挂载失败且仅报“mounts denied”;添加后用-v或--mount指定原始绝对路径挂载,注意路径末尾不可带斜杠。

在Mac上使用Docker时,要把宿主机的某个文件夹挂载进容器,必须确保该路径位于Docker Desktop已共享的目录范围内,否则容器启动会直接失败并报错“Mounts denied”。
确认宿主机目录是否被Docker Desktop允许挂载
打开 Docker Desktop → Preferences → Resources → File Sharing,检查你要挂载的路径(例如 /Users/yourname/project)是否已在共享列表中。如果不在,点击 + 添加它,然后点击 Apply & Restart。这一步不可跳过,【未添加的路径即使存在也无法挂载,且不会提示具体原因,只会报错退出】。
添加后,Docker会自动将该路径映射到容器内可访问的 /host_mnt 下(如 /host_mnt/Users/yourname/project),但你无需手动拼这个路径——直接用原始绝对路径即可。
使用 -v 参数挂载目录(最常用)
执行以下命令启动容器:
docker run -it -v /Users/yourname/project:/app nginx:alpine
其中 /Users/yourname/project 是你 Mac 上的真实路径,/app 是容器内目标目录。这一步操作起来很简单,直接复制粘贴改路径就行。
⚠️注意:如果宿主机路径末尾带斜杠(如 /Users/yourname/project/),Docker 会把它当作文件而非目录处理,导致挂载失败。务必确保路径不以 / 结尾。
使用 --mount 参数挂载(推荐用于复杂场景)
方法一:显式声明 bind 类型
docker run -it --mount type=bind,src=/Users/yourname/project,target=/app nginx:alpine
方法二:启用只读挂载(防止容器误写)
docker run -it --mount type=bind,src=/Users/yourname/project,target=/app,readonly nginx:alpine
【--mount 不会自动创建宿主机目录,若路径不存在会直接报错“No such file or directory”】,而 -v 会静默创建空目录——这点差异必须清楚。
验证挂载是否成功
第一步:进入容器
docker exec -it sh
第二步:检查挂载点
ls /app
第三步:确认挂载来源
mount | grep app
输出中应包含类似 /dev/sda1 on /app type ext4 (rw,relatime) 或明确显示 host path 的条目。如果 ls /app 返回空或报错,大概率是路径未共享或拼写错误。











