提问者:小点点

将网络共享用于数据目录时MySql docker容器未启动


我正在Ubuntu中运行docker,并尝试创建和运行一个MySql容器。我想为数据目录使用挂载的网络共享。我正在尝试下面的docker run命令,但我遇到了权限问题。我怎么解决这个?

root@jarvis:/mnt/wayne/mysql-data$sudo docker run-it-p 3306:3306-e mysql_root_password=admin-v/mnt/wayne/mysql:/var/lib/mysql/--name mysqlserver mysql/mysql-server

[Entrypoint] MySQL Docker Image 8.0.20-1.1.16
[Entrypoint] Initializing database
2020-06-08T21:43:25.253898Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.20) initializing of server in progress as process 22
2020-06-08T21:43:25.281460Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-06-08T21:43:27.815075Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
mysqld: Cannot change permissions of the file 'ca.pem' (OS errno 1 - Operation not permitted)
2020-06-08T21:43:29.851875Z 0 [ERROR] [MY-010295] [Server] Could not set file permission for ca.pem
2020-06-08T21:43:29.852970Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2020-06-08T21:43:29.854806Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-06-08T21:43:31.947298Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.20)  MySQL Community Server - GPL.

共1个答案

匿名用户

使用CIFs进行网络挂载意味着远程服务器是windows吗?我的回答就是基于这个假设。

最新的mysql docker映像有一个名为mysql的用户,它的uid=27,gid=27您可以通过挂载一个空文件夹作为data_dir来验证这一点。您将看到mysql容器创建的文件的用户和组为27。因此,mysql容器在其data_dir中需要UID/GID(所有者用户id和所有者组id)为27的文件。但是从windows共享挂载的文件具有UID/GID,它属于在Ubuntu中执行mount命令的用户。这是mount命令的默认行为。

要解决这个问题,您需要将“uid=27,gid=27”参数传递给Linux mount命令。

例如:

sudo mount-t cifs-o username=windows-username,uid=27,gid=27//win_share_ip//mnt/wayne

你可以在这里了解更多的细节

我必须说,在网络共享上运行mysql是不太可能的。不会有好的表现。