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

跨Windows与Ubuntu系统Docker LAMP环境MySQL数据共享配置问题

解决方案:NTFS共享分区下Docker MySQL权限问题修复

一、调整NTFS分区挂载参数(/etc/fstab)

NTFS本身不支持Linux的POSIX权限体系,只能通过挂载参数模拟权限映射。之前的配置把分区GID设为999,但Docker又强制用1000:1000用户,导致权限完全不匹配。直接把分区所有者映射为MySQL容器默认的mysql用户(UID/GID均为999):

UUID=xxx /mnt/share ntfs defaults,uid=999,gid=999,fmask=0002,dmask=0002 0 0

参数说明:

  • uid=999,gid=999:将NTFS分区所有文件/目录的所有者直接对应到MySQL容器内的mysql用户
  • fmask=0002:文件权限设为775(-rwxrwxr-x),保证所有者和组有完整读写执行权限
  • dmask=0002:目录权限设为775,确保容器能正常访问、创建目录

修改后重新挂载分区:

sudo umount /mnt/share
sudo mount -a

二、调整Docker Compose配置

不需要强制给MySQL容器指定1000:1000用户,让它用默认的mysql用户即可,同时简化数据卷配置:

修改后的docker-compose.yml

version: "3.1"
services:
    www:
        build:
            context: .
            dockerfile: Dockerfile.lamp
        user: 1000:1000
        ports: 
            - "${WEBSERVER_PORT}:80"
        volumes:
            - ./www:/var/www/html/
        networks:
            - default
    db:
        image: mysql:8.0
        # 移除user:1000:1000,用容器默认的mysql用户(UID/GID 999)
        ports: 
            - "3306:3306"
        command: --default-authentication-plugin=mysql_native_password
        environment:
            MYSQL_DATABASE: ${MYSQL_DATABASE}
            MYSQL_USER: ${MYSQL_USER}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD}
            MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD} 
        volumes:
            - ./sql:/docker-entrypoint-initdb.d
            - ./conf:/etc/mysql/conf.d
            # 直接绑定主机目录,省去named volume的冗余配置
            - ./mysql_data:/var/lib/mysql
        networks:
            - default
    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        ports:
            - ${PHPMYADMIN_PORT}:80
        networks:
            - default
        environment:
            MYSQL_USER: ${MYSQL_USER}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD}
            MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}
            UPLOAD_LIMIT: 64M 
            PMA_HOST: db # 明确指定连接的MySQL服务名,避免连接失败
networks:
    default:

三、初始化目录(关键步骤)

如果之前已经创建过mysql_data目录,先清理旧数据避免冲突:

  1. 停止并删除现有容器及数据卷:
docker-compose down -v
  1. 手动创建mysql_data目录(如果不存在):
mkdir -p ./mysql_data

因为NTFS挂载后目录所有者已经是999:999,不需要执行chown(NTFS不支持该命令)

四、验证运行

启动容器:

docker-compose up -d

查看MySQL容器日志,确认没有权限报错:

docker-compose logs db

访问phpMyAdmin测试登录,创建数据库/表验证数据写入正常即可。

补充注意事项

  • 双系统切换时,确保Windows下没有打开共享分区内的文件,否则Ubuntu可能会以只读模式挂载分区,导致MySQL无法写入
  • NTFS不支持Linux特殊权限(SUID/SGID等),但MySQL运行不需要这些权限,上述配置完全满足需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:36:30