我想在WSL(Windows)中永久使用docker-compose存储我的数据库数据。
我的docker-compose.yml文件在下面。
/C/Users/XXX/Documents/dev/db-data
是数据库数据目录,该目录将永久存储数据。
我可以使用下面的docker-compose.yml来构建容器。
db_docker:
image: mysql:5.7
container_name: mysql
env_file:
- .env.mysql
ports:
- "3306:3306"
volumes:
- /C/Users/XXX/Documents/dev/db-data:/var/lib/mysql
但是我无法访问此容器的数据库,并且错误消息如下所示。
错误29(HY000):找不到文件'./mysql/user.MYD'(错误代码:13-权限被拒绝)
我搜索了此错误消息,发现/var/lib/mysql
的所有权为root:root
。
drwxrwxrwx 2根根4096 Nov 27 03:42 mysql
drwxrwx --- 2个mysql mysql 4096 Nov 16 01:14 mysql-files
drwxr-x --- 2个mysql mysql 4096 Nov 16 01:14 mysql-keyring
我测试了如果从docker-compose.yml中删除卷设置,所有权将如何更改。然后我使用下面的设置文件构建了容器。
db_docker:
image: mysql:5.7
container_name: mysql
env_file:
- .env.mysql
ports:
- "3306:3306"
在这种情况下,/var/lib/mysql
的所有权为mysql:mysql
,我可以访问我的数据库。
基于这些事实,挂载文件会将/var/lib/mysql
的所有权固定为root:root
,如果我可以更改/var/lib/mysql
的权限,就可以解决我的问题。
接下来,我尝试如下操作。 999
是mysql的UID和GID,但是/var/lib/mysql
的权限是root:root
。
db_docker:
image: mysql:5.7
container_name: mysql
env_file:
- .env.mysql
ports:
- "3306:3306"
user: "999:999"
volumes:
- /C/Users/XXX/Documents/dev/db-data:/var/lib/mysql
这是我的思考故事,直到现在我都无法解决这个问题。 如何更改已挂载目录的所有权?