[root@XIANG data]# docker run --name mysql5735 -v /mnt/c/develop/data/mysql5735/data/:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --privileged=true percona:5.7.35
Initializing database
2021-09-13T08:20:49.822230Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-09-13T08:20:49.833563Z 0 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
2021-09-13T08:20:50.589278Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-09-13T08:20:50.716218Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-09-13T08:20:50.787137Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 8178b7fc-146b-11ec-aa00-0242ac110002.
2021-09-13T08:20:50.796367Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
mysqld: Can't change permissions of the file 'private_key.pem' (Errcode: 1 - Operation not permitted)
2021-09-13T08:20:50.854306Z 0 [ERROR] Could not set file permission for private_key.pem
2021-09-13T08:20:50.854328Z 0 [ERROR] Aborting
[root@XIANG data]# pwd
/mnt/c/develop/data/mysql5735/data
[root@XIANG data]# ll
total 110596
-rwxrwxrwx 1 root root 56 Sep 13 16:20 auto.cnf
-rwxrwxrwx 1 root root 221 Sep 13 16:20 ib_buffer_pool
-rwxrwxrwx 1 root root 12582912 Sep 13 16:20 ibdata1
-rwxrwxrwx 1 root root 50331648 Sep 13 16:20 ib_logfile0
-rwxrwxrwx 1 root root 50331648 Sep 13 16:20 ib_logfile1
-rwxrwxrwx 1 root root 1676 Sep 13 16:20 private_key.pem
[root@XIANG data]# umask
0000
[root@XIANG data]#
或是出现这样的错误提示
[root@XIANG data]# docker run --name mysql5735 \
develop/data/mys> -v /mnt/c/develop/data/mysql5735/data/:/var/lib/mysql \
/data/my> -v /mnt/c/develop/data/mysql5735/log/:/var/log/mysql \
3306 -e > -p 5735:3306 -e MYSQL_ROOT_PASSWORD=root --privileged=true percona:5.7.35
Initializing database
mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied)
2021-09-13T15:54:59.193833Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-09-13T15:54:59.194912Z 0 [ERROR] --initialize specified but the data directory exists and is not writable. Aborting.
2021-09-13T15:54:59.194920Z 0 [ERROR] Aborting
请问这个问题如何解决呀。困扰好几天了。
#镜像地址:https://hub.docker.com/_/percona/
#拉取镜像
docker pull percona:5.7.35
#运行容器
docker run --privileged=true --name percona5735 -v /mnt/d/develop/data/mysql5735/data/:/var/lib/mysql -p 5735:3306 -e MYSQL_ROOT_PASSWORD=root -itd percona:5.7.35
#参数解释:
--privileged=true: 使用该参数,container内的root拥有真正的root权限
--name: percona 指定是容器的名称
-v: //mnt/d/develop/data/mysql5735/data/:/var/lib/mysql 将主机目录/mnt/d/develop/data/mysql5735/data/挂载到容器
的/var/lib/mysql上
-p: 5735:3306 设置端口映射,主机端口是 5735,容器内部端口 3306
-e: MYSQL_ROOT_PASSWORD=root 设置容器参数,设置root用户的密码为root
percona:5.7.35: 镜像名:版本
[root@XIANG data]# docker run --privileged=true --name mysql5735 \
c/develop/data/m> -v /mnt/c/develop/data/mysql5735/data/:/var/lib/mysql \
mysql573> -v /mnt/c/develop/data/mysql5735/log/:/var/log/mysql \
QL_ROOT_> -p 5735:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.35
Initializing database
mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied)
2021-09-13T16:25:02.488017Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-09-13T16:25:02.488885Z 0 [ERROR] --initialize specified but the data directory exists and is not writable. Aborting.
2021-09-13T16:25:02.488893Z 0 [ERROR] Aborting
[root@XIANG data]#
[root@XIANG data]#
[root@XIANG data]# ll
total 8
drwxrwxrwx 3 root root 4096 Sep 13 22:30 mysql5723
drwxr-xr-x 4 root root 4096 Sep 14 00:25 mysql5735
[root@XIANG data]# umask
0022
#修改目录权限后,再启动容器
[root@XIANG data]# chmod -R 777 /mnt/c/develop/data/
[root@XIANG data]# ll
total 8
drwxrwxrwx 3 root root 4096 Sep 13 22:30 mysql5723
drwxrwxrwx 4 root root 4096 Sep 14 00:25 mysql5735
[root@XIANG data]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
54275f75c967 percona:5.7.35 "/docker-entrypoint.…" 2 minutes ago Exited (1) 2 minutes ago mysql5735
ee5db27166af percona:5.7.23 "/docker-entrypoint.…" 2 hours ago Exited (255) 2 hours ago 0.0.0.0:5723->3306/tcp, :::5723->3306/tcp percona5723
[root@XIANG data]# docker start mysql5735
mysql5735
[root@XIANG data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
54275f75c967 percona:5.7.35 "/docker-entrypoint.…" 2 minutes ago Up 4 seconds 0.0.0.0:5735->3306/tcp, :::5735->3306/tcp mysql5735
[root@XIANG data]#
修正:
应避免在 docker run 命令中使用 /mnt/c/的挂载路径,否则就会出现权限不够,以无法修改的问题,以下是官方文档的说明。
最佳实践🔗[官方文档说明](https://docs.docker.com/desktop/windows/wsl)
为了在绑定挂载文件时获得最佳的文件系统性能,我们建议将绑定挂载到 Linux 容器(即 with docker run -v <host-path>:<container-path>)中的源代码和其他数据存储在 Linux 文件系统中,而不是 Windows 文件系统中。您也可以参考Microsoft的建议。
如果原始文件存储在 Linux 文件系统中,Linux 容器只会接收文件更改事件(“inotify 事件”)。例如,某些 Web 开发工作流依赖 inotify 事件在文件更改时自动重新加载。
当文件从 Linux 文件系统绑定挂载而不是从 Windows 主机远程安装时,性能要高得多。因此避免 docker run -v /mnt/c/users:/users(/mnt/c从 Windows 安装的位置)。
相反,从 Linux shell 使用类似docker run -v ~/my-project:/sources <my-image> where的命令~被 Linux shell 扩展为$HOME.