Bra*_*tes 6 mysql permissions mount container docker
我遇到了 docker-compose 的问题,它在已安装的硬盘驱动器上的文件夹中安装了一个卷。我见过很多解决方案,并且诚实地尝试了所有这些解决方案。
我在各自的组中更改了我正在使用的用户、root、docker 的权限。没有什么
写入操作工作正常,我可以通过 python 写入文件,我不受限制,但是当我运行 docker compose 来创建 sql db 时,它给了我这个:
错误:对于 mysql_db 无法启动服务 mysql_db:创建安装源路径“/db-path-mount”时出错:chown /db-path-mount/db-volume-folder/db-one:不允许操作
错误:对于 mysql_db 无法启动服务 mysql_db:创建安装源路径 '/db-path-mount' 时出错:chown /db-path-mount/db-volume-folder/db-one:不允许操作 错误:遇到错误提出该项目。
那里的故障排除似乎很少,我尝试了 docker-compose up -d 和 sudo docker-compose up -d,没有任何真正的改变。
drwxr-xr-x 3 myUser docker 4028276 Jul 26 04:47 db-volume-folder/
Run Code Online (Sandbox Code Playgroud)
和我的挂载点(etc/fstab):
UUID=MY_UUID /home/user/my_mount_point auto uid=1001,gid=122,umask=022,defaults 0 1
(gid=122 is docker)
(uid=1001 is user)
Run Code Online (Sandbox Code Playgroud)
我使用的是ubuntu 20服务器
docker-compose.yml:
version: "3.7"
services:
my_sql_db:
container_name: my_sql_db
user: root
image: mysql/mysql-server:latest
ports:
- "1533:3306"
env_file:
- secrets/sqlserver.env
- secrets/sqlpassword.env
volumes:
- ./db-path-mount/db-volume-folder/db-one:/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
在你的设置中有几件事我会做不同的事情,我将尝试在我的答案中概述这一点。我不能保证它会起作用,但这就是我设置容器的方式,所以希望它能有所帮助。
首先,我不会使用uid和gid属性来挂载我的数据磁盘。我将使用默认属性进行安装,如下所示:
UUID=MY_UUID /home/user/my_mount_point auto umask=022,defaults 0 1
Run Code Online (Sandbox Code Playgroud)
(从现在开始,我将使用/home/user/my_mount_point您的磁盘安装位置作为参考。)
其次,我不明白你的卷参考docker-compose.yml。我会这样:
volumes:
- /home/user/my_mount_point/db-volume-folder/db-one:/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
请注意,我总是在docker-compose.yml.
此外,所有权应与正在运行的容器的所有权相匹配,因此该文件夹db-one应归 root 所有。
myUser@ubuntu:~/my_mount_point/db-volume-folder$
drwxr-xr-x 3 root root 4028276 Jul 26 04:47 db-one
Run Code Online (Sandbox Code Playgroud)
请注意,文件夹名称db-one应与卷安装路径左侧的最后一个文件夹匹配-这是权限重要的文件夹。
最后,正如您所注意到的,docker-compose 还支持您指定容器应以哪个用户身份运行。所以我相信您可以更改用户,然后相应地更改所有权。
因此,如果您像这样更改用户:
version: "3.7"
services:
my_sql_db:
container_name: my_sql_db
user: myUser
Run Code Online (Sandbox Code Playgroud)
然后文件夹权限要匹配:
myUser@ubuntu:~/my_mount_point/db-volume-folder$
drwxr-xr-x 3 myUser myUser 4028276 Jul 26 04:47 db-one
Run Code Online (Sandbox Code Playgroud)
我希望其中一些说明对您有用 - 如果有用,请告诉我们。
编辑:
我刚刚使用以下 docker-compose.yml 测试了 MySql 容器:
version: "3.7"
services:
my_sql_db:
container_name: my_sql_db
user: root
image: mysql/mysql-server:latest
ports:
- "1533:3306"
environment:
MYSQL_ROOT_PASSWORD: topsecret
MYSQL_USER: mysqluser
MYSQL_PASSWORD: mysqlpassword
volumes:
- /mnt/zfs/docker-data/mysql-test/db-one:/var/lib/mysql
restart: always
Run Code Online (Sandbox Code Playgroud)
这是文件夹的内容/mnt/zfs/docker-data/mysql-test:
/mnt/zfs/docker-data/mysql-test$ ls -la
total 7
drwxr-xr-x 3 root root 4 Aug 1 22:02 .
drwxr-xr-x 22 root root 22 Aug 1 21:47 ..
drwxr-xr-x 6 27 sudo 30 Aug 1 21:59 db-one
-rw-r--r-- 1 root root 374 Aug 1 21:58 docker-compose.yml
Run Code Online (Sandbox Code Playgroud)
这样容器就成功起来了。看来容器本身将所有权更改为27:sudo(我猜这些是默认值)。
如果我将用户更改docker-compose.yml为myuser:myuser并将文件夹的权限更改db-one为myuser:myuser,则在尝试启动容器时会收到此错误:
ERROR: for my_sql_db Cannot start service my_sql_db: unable to find user myuser: no matching entries in passwd file
Run Code Online (Sandbox Code Playgroud)
因此,问题似乎出在匹配用户之间,而不是文件系统所有权之间。如果您遇到另一个错误,则可能是文件系统所有权之外的其他错误 - 请参阅评论中的我的链接。
| 归档时间: |
|
| 查看次数: |
23488 次 |
| 最近记录: |