如何修复Docker创建挂载源路径时的输入输出错误?
解决Docker在macOS上创建/srv挂载目录时的IO错误问题
问题原因
macOS默认不存在/srv系统目录,Docker Desktop通过/host_mnt映射宿主文件系统时,无权限自动创建该目录或访问对应路径,最终触发挂载IO错误。
解决方案
1. 手动创建宿主目录并配置权限
打开终端执行以下命令,创建所需目录并赋予Docker足够的读写权限:
sudo mkdir -p /srv/pterodactyl/{database,var,nginx,certs,logs} sudo chmod -R 777 /srv/pterodactyl
注:777权限为快速适配的宽松配置,生产环境可根据实际需求调整为更严格的权限规则。
2. 配置Docker Desktop文件共享
- 打开Docker Desktop,点击顶部菜单栏Docker图标 →
Preferences - 切换到
Resources标签页,选择File Sharing选项 - 点击列表下方的
+按钮,找到并添加/srv目录 - 点击
Apply & Restart,等待Docker完成重启
3. (可选)改用用户目录替代系统目录
若不想使用/srv系统目录,可将Docker Compose中的挂载路径改为用户主目录下的路径,规避系统目录权限限制。修改后的Compose文件示例:
services: database: # 其他配置保持不变 volumes: - "~/pterodactyl/database:/var/lib/mysql" panel: # 其他配置保持不变 volumes: - "~/pterodactyl/var/:/app/var/" - "~/pterodactyl/nginx/:/etc/nginx/http.d/" - "~/pterodactyl/certs/:/etc/letsencrypt/" - "~/pterodactyl/logs/:/app/storage/logs"
修改后需先创建~/pterodactyl目录,并确保该目录已添加到Docker Desktop的File Sharing列表中。
4. 重新部署容器
执行以下命令重启服务:
docker-compose down docker-compose up -d
内容的提问来源于stack exchange,提问作者SimpIsHigh
相关产品推荐
相关产品推荐

