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

Ubuntu16.04下Docker Compose启动MySQL服务失败:配置目录不存在报错

解决MySQL容器启动报错:找不到/etc/mysql/mysql.conf.d目录的问题

嘿,我来帮你搞定这个头疼的问题!从你给出的报错信息mysqld: can't read dir of '/etc/mysql/mysql.conf.d' (os errno 2 - no such file or directory)来看,核心问题就是容器里的MySQL服务找不到它需要的配置目录。咱们一步步排查解决:

可能的原因&解决方案

1. 检查Docker镜像构建逻辑

你在docker-compose-dev.yml里给db服务配置了build: ./docker/mysql,说明Docker会用这个目录下的Dockerfile来构建镜像:

  • 先打开./docker/mysql/Dockerfile,确认是不是基于官方MySQL镜像(比如FROM mysql:5.7这类)。官方镜像默认自带/etc/mysql/mysql.conf.d目录,如果你的Dockerfile里有删除这个目录的操作,或者用了没有该结构的自定义基础镜像,肯定会报错。
  • 如果Dockerfile没问题,那可能是构建缓存搞的鬼,试试强制重新构建镜像:
    docker-compose -f docker-compose-dev.yml build --no-cache db
    

2. 配置本地目录挂载(适配自定义/默认配置)

从你给出的docker-compose-dev.yml片段来看,你只挂载了数据目录到/var/lib/mysql,但没处理配置目录。如果本地./docker/mysql没有mysql.conf.d,或者没挂载到容器对应路径,就会导致容器找不到该目录:

  • 先在本地创建对应的配置目录:
    mkdir -p ./docker/mysql/mysql.conf.d
    
  • 如果你需要用官方默认配置,可以临时启动一个官方MySQL容器,把配置复制到本地:
    # 启动临时容器
    docker run --rm -d --name temp-mysql mysql:5.7
    # 复制配置目录到本地
    docker cp temp-mysql:/etc/mysql/mysql.conf.d ./docker/mysql/
    # 停止临时容器
    docker stop temp-mysql
    
  • 然后修改docker-compose-dev.yml里的volumes部分,添加配置目录的挂载:
    volumes:
      - ./docker/mysql/data:/var/lib/mysql
      - ./docker/mysql/mysql.conf.d:/etc/mysql/mysql.conf.d
    

3. 排查目录权限问题

Ubuntu系统下的目录权限可能影响Docker挂载效果,容器里的MySQL进程通常用uid为999的用户,确保本地./docker/mysql目录及其子目录能被这个用户访问:

sudo chown -R 999:999 ./docker/mysql

验证修复效果

完成上面的操作后,重新启动db服务:

docker-compose -f docker-compose-dev.yml up -d db

然后查看容器日志,确认服务正常启动:

docker logs erentpay_db_1

内容的提问来源于stack exchange,提问作者Matteo Cacciola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:40:36