启动容器报错ls: cannot access ‘/docker-entrypoint-initdb.d/‘: Operation not permitted

错误原因分析

  1. ‌SELinux 安全模块限制‌:CentOS 系统默认启用 SELinux,会限制容器对某些目录的访问权限。
  2. ‌Docker 权限不足‌:容器缺少执行初始化脚本所需的权限。

解决方案

方法一:添加特权模式(好使)

在 docker-compose.yml 中为容器添加 --privileged 参数,赋予容器 root 权限:

复制代码
services:
  your_service:
    image: your_image
    privileged: true  # 添加此行
    volumes:
      - ./initdb.d:/docker-entrypoint-initdb.d

‌注意‌:使用特权模式存在安全风险,建议仅在测试环境中使用。

方法二:修改 SELinux 配置

临时禁用 SELinux(重启后失效):

复制代码
setenforce 0 

永久禁用 SELinux(需重启系统):

复制代码
vi /etc/selinux/config # 将 SELINUX=enforcing 改为 SELINUX=disabled 
方法三:检查目录权限

确保主机目录权限正确:

复制代码
chmod 755 ./initdb.d 

并在 docker-compose.yml 中正确映射:

复制代码
volumes: - ./initdb.d:/docker-entrypoint-initdb.d:ro # 添加只读权限 

验证步骤

  1. 修改 docker-compose.yml 后,执行 docker-compose down 清理旧容器。
  2. 重新启动服务:docker-compose up -d。
  3. 检查日志:docker-compose logs。

其他建议

  • 若问题持续,升级 Docker 版本至 20.10.9+(如 CentOS 7)。
  • 确认 docker-entrypoint-initdb.d 目录下文件格式正确(如 .sh 或 .sql)。

优先推荐方法一(添加特权模式),若需长期解决方案,建议方法二(禁用 SELinux)。

相关推荐
sbjdhjd1 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
热爱Liunx的丘丘人2 小时前
1、什么是K8s
云原生·容器·kubernetes
帷幕落秋3 小时前
Docker的两种安装
运维·docker·容器
工业一体机老司机3 小时前
工业一体机选购后的系统部署:Ubuntu下Docker容器化运行与GPIO配置
linux·ubuntu·docker·人机交互
fengkai45453 小时前
十二、Redis -2
运维·数据库·redis·容器
DolitD5 小时前
3D应用多实例并发中的GPU隔离技术路径分析
容器·gru·接口隔离原则
姜鱼问生7 小时前
docker exec 排查容器问题:从日志到进程
运维·网络·数据库·docker·容器
人生百态,人生如梦8 小时前
Ubuntu在低版本下使用ccswitch+claudecode(CCSwitch+Docker+Claude)连调教程
linux·ubuntu·docker·claudecode·ccswitch
程序员老赵8 小时前
Docker 部署 OpenViking:轻松搭建 AI Agent 上下文数据库平台
docker·开源·agent
吴声子夜歌9 小时前
Docker入门与实战——高级镜像构建
docker