You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署PostgreSQL时‘Operation not permitted’错误原因排查

问题原因分析

1. MacOS文件系统权限与隔离限制

MacOS的隐私保护机制(即使给终端开了全磁盘访问,Docker容器进程的权限仍受Docker Desktop文件共享配置约束),加上系统对部分目录的默认保护,会导致容器无法读取挂载的本地脚本。如果脚本所在目录未添加到Docker Desktop的文件共享列表,容器直接没有访问权限,就会抛出"Operation not permitted"。

2. 本地脚本路径错误

执行chmod时提示文件不存在,说明你指定的路径要么拼写有误,要么终端执行命令时的工作目录和脚本实际所在目录不匹配。比如你在Compose里写的是相对路径./docker-database-initial.sql,但启动Compose时的工作目录并不是脚本所在目录,导致挂载的是一个不存在的文件,容器内自然无法读取。

3. Docker Compose挂载语法错误

如果挂载配置写错,比如把本地路径和容器路径搞反,或者本地路径指向的是目录而非文件,会导致容器内/docker-entrypoint-initdb.d/下的脚本异常。正确的挂载写法示例:

volumes:
  - ./docker-database-initial.sql:/docker-entrypoint-initdb.d/docker-database-initial.sql

若本地路径写错成目录,容器内对应的位置会变成空目录,而非脚本文件,进而触发权限或执行错误。

4. MacOS文件扩展属性限制

如果脚本是从网络下载的,MacOS会自动添加com.apple.quarantine扩展属性标记,即使修改文件权限,这个属性也会阻止容器访问文件。可以用以下命令排查并解决:

# 查看文件扩展属性
xattr -l docker-database-initial.sql
# 删除隔离属性
xattr -d com.apple.quarantine docker-database-initial.sql

5. Docker Desktop文件共享未配置

Docker Desktop在MacOS下需要手动开启目标目录的文件共享权限。打开Docker Desktop的Settings -> Resources -> File Sharing,检查脚本所在的父目录是否在共享列表中,若未添加则手动加入,之后重启Docker Desktop生效。

内容的提问来源于stack exchange,提问作者Kaio H. Cunha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:05:42