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

Docker Compose部署MySQL遇binlog.index权限拒绝问题求助

MySQL容器启动失败(权限问题)解决方案

核心问题定位

日志中关键错误:

mysqld: File './binlog.index' not found (OS errno 13 - Permission denied)

这是因为本地挂载的./db目录权限不足,MySQL容器内的mysql用户(UID/GID 999)无法读写该目录,导致无法创建必要的日志文件。

解决方法

1. 修复本地挂载目录权限

执行以下命令,将./db目录的所有权转移给MySQL容器内的用户:

sudo chown -R 999:999 ./db

如果是Windows系统,右键db目录 → 属性 → 安全,为Everyone添加读写权限(或指定Docker相关用户)。

2. 使用Docker管理卷替代本地挂载(无权限问题)

修改docker-compose.yml,将本地目录挂载改为Docker内部卷:

version: "3.9"
services:
  mysql:
    image: mysql/mysql-server:8.0.32
    container_name: mysql-database
    environment:
      MYSQL_DATABASE: book  # 修正为Spring Boot连接的数据库名
      MYSQL_USER: username
      MYSQL_PASSWORD: pass
      MYSQL_ROOT_PASSWORD: pass
      MYSQL_ROOT_HOST: '%'
      MYSQL_PORT: 3306
    volumes:
      - mysql-data:/var/lib/mysql  # 替换为内部卷
    ports:
      - "3306:3306"

  project-be:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: project-be
    ports:
      - "9790:9790"
    depends_on:
      - mysql
    environment:
      - SPRING_PROFILES_ACTIVE=development
      - DB_USERNAME=username
      - DB_PASSWORD=pass
      - DB_URL=jdbc:mysql://host.docker.internal:3306/book

# 新增全局卷定义
volumes:
  mysql-data:

这种方式数据由Docker管理,不会出现权限问题,但数据不会保存在本地项目目录中。

3. 修正数据库名不一致问题

注意到docker-compose.yml中MYSQL_DATABASE设置为username,但Spring Boot的DB_URL指向的数据库是book,两者不一致会导致后续连接失败,建议将MYSQL_DATABASE改为book(如上代码所示)。

内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:12:36