运行docker启动postgres容器时出现Mounts denied挂载错误该如何解决?
报错说明
启动PostgreSQL容器执行命令:
docker run -d \ --name some-postgres \ -e POSTGRES_PASSWORD=mysecretpassword \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v /custom/mount:/var/lib/postgresql/data \ postgres收到报错:
docker: Error response from daemon: Mounts denied: The path /custom/mount is not shared from the host and is not known to Docker. You can configure shared paths from Docker -> Preferences... -> Resources -> File Sharing.
该报错的原因是Docker Desktop默认仅允许挂载白名单内的本地宿主路径,你指定的/custom/mount不在当前共享白名单中,因此挂载操作被拒绝。
解决方法
方法1:添加路径到Docker共享白名单(适合需要把数据存在本地指定路径的场景)
- 打开Docker Desktop客户端,点击顶部菜单栏的
Docker选项,选择Preferences...(偏好设置) - 在左侧导航栏选择
Resources(资源)分类,点击下属的File Sharing(文件共享)选项 - 点击页面上的
+按钮,在弹出的选择框中选中/custom/mount路径添加到共享列表;如果需要挂载任意路径,也可以直接添加根目录/到共享列表(仅建议对本地安全性要求不高的场景使用) - 点击页面右下角的
Apply & Restart(应用并重启)按钮,等待Docker完成重启操作 - 重新执行原启动命令即可正常启动容器
方法2:使用Docker命名卷存储数据(无需配置文件共享,适合不需要手动访问本地数据文件的场景)
将原启动命令中的本地挂载参数替换为命名卷参数即可,修改后命令如下:
docker run -d \ --name some-postgres \ -e POSTGRES_PASSWORD=mysecretpassword \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v postgres_data:/var/lib/postgresql/data \ postgres
Docker会自动创建名为postgres_data的命名卷来持久化存储PostgreSQL数据,无需配置本地路径共享权限。
内容的提问来源于stack exchange,提问作者Bobo Tan
相关产品推荐
相关产品推荐

