在 Windows 主机 (WSL) 上的 Docker 中运行 MySQL 8,数据目录的卷不可用

在 Windows 主机 (WSL) 上的 Docker 中运行 MySQL 8,数据目录的卷不可用

当我尝试使用 WSL2 集成在 Windows 主机中运行 MySQL 8.0 Docker 时遇到问题。

因此,环境:

1- Host: Windows 10 Professional.

2- Docker v19.03

运行docker的命令:

docker run \
    -i \
    --name mysqlbase \
    -e "MYSQL_ROOT_PASSWORD=s3cret" \
    -p 3306:3306 \
    -v $(pwd)/data:/var/lib/mysql \
    mysql:8.0

在目录 /data 中创建目录和文件:

MySQL 文件

执行结果如下:

Initializing database
mysqld: Cannot change permissions of the file 'ca.pem' (OS errno 1 - Operation not permitted)
2020-11-11T23:29:03.663345Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2020-11-11T23:29:03.663764Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.16) initializing of server in progress as process 30
2020-11-11T23:29:03.670814Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
2020-11-11T23:29:03.671189Z 0 [Warning] [MY-010122] [Server] One can only use the --user switch if running as root
2020-11-11T23:29:19.833339Z 0 [ERROR] [MY-010295] [Server] Could not set file permission for ca.pem
2020-11-11T23:29:19.833377Z 0 [ERROR] [MY-013236] [Server] Newly created data directory /var/lib/mysql/ is unusable. You can safely remove it.
2020-11-11T23:29:19.833522Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-11-11T23:29:22.394972Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.16)  MySQL Community Server - GPL.

问题:新创建的数据目录 /var/lib/mysql/ 不可用

使用 MySQL:5.6 效果很好...但我需要 8。

更新:我怀疑mysql必须拥有目录所有权的用户。我已经尝试在 Windows 上创建一个 mysql 用户,获取其 uid,并修改 Dockerfile(https://github.com/docker-library/mysql/blob/1a25a09159a3d7b6b5b8ad0e6c7eb53504b3aab5/8.0/Dockerfile),这样当它创建图像时,它会为其分配相同的 uid,但这不起作用。16342 对应于 Windows 用户的 id。

RUN groupadd -r mysql && useradd -u 16342 -r -g mysql mysql

我已经阅读了有关该问题的所有问题...但没有任何效果...有什么想法吗?

提前致谢

答案1

不要将本地目录挂载为卷,尝试使用 docker 管理的命名卷

最大的区别是,这个卷不会受到 Windows 文件系统的限制,这似乎是造成这里问题的原因。

当使用 docker 进行开发数据库时,这通常是您想要的,因为它可以很好地保护卷数据,并且根本不会干扰本地目录。

相关内容