mysql 'volume' 的一些奇怪(或不奇怪)的东西
Some strange (or not) thing with mysql 'volume'
只需使用 docker-compose.yaml 创建数据库服务:
# another db service for test
version: '3.5'
networks:
dockernet:
driver: bridge
services:
db:
image: mysql/mysql-server:5.5.62
restart: on-failure
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- ./mysql_dir:/var/lib/mysql
networks:
- dockernet
接下来,在我的 ~:
中添加目录 'mysql'
docker:~/docker$ ls -l
total 8
-rw-r--r-- 1 futur futur 674 Nov 5 04:35 docker-compose.yaml
drwxr-sr-x 2 futur futur 4096 Nov 5 04:37 mysql_dir
我将我的帐户添加到群组 'docker':
docker:~/docker$ grep docker /etc/group
docker:x:101:futur
在 up/down 我的 docker-compose 之后,我看到我的目录的权限发生了奇怪的变化:
docker:~/docker$ ls -l
total 8
-rw-r--r-- 1 futur futur 298 Nov 5 05:10 docker-compose.yaml
drwxr-sr-x 5 27 video 4096 Nov 5 05:11 mysql_dir
为什么变成'27'和'video'?那是什么?这正常吗?
这种行为会阻止我(用户 'futur')复制和移动目录 'mysql_dir'。
我应该只从 root 用户使用 docker 吗?有什么方法可以避免使用 root 用户来使用 docker 吗?
如果您 运行 docker exec <your_container> stat /var/lib/mysql
在您的主机上,检查 /var/lib/mysql
文件夹 在容器 中的权限,那么您会看到它的 uid 是 27
(用户 mysql
),gid 是 27
(组 mysql
):
File: '/var/lib/mysql'
Size: 4096 Blocks: 8 IO Block: 4096 directory
...
Access: (0750/drwxr-x---) Uid: ( 27/ mysql) Gid: ( 27/ mysql)
...
当您在主机和容器之间挂载卷时,Docker 根据容器内的内容更改主机上挂载目录的权限(此处 uid=27
、gid=27
).
你从主机上看到的是正常的:27
是因为你的主机上没有任何用户 uid=27
,你看到 video
组,因为这组在您的主机上有 gid=27
(您可以通过 运行ning getent group video
验证)。
您可以更改 mysql
容器内的 uid 和 gid 以匹配主机上的那些,但我强烈建议您不要这样做。如果您想备份数据,您宁愿使用 volumes 而不是安装本地目录。
只需使用 docker-compose.yaml 创建数据库服务:
# another db service for test
version: '3.5'
networks:
dockernet:
driver: bridge
services:
db:
image: mysql/mysql-server:5.5.62
restart: on-failure
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- ./mysql_dir:/var/lib/mysql
networks:
- dockernet
接下来,在我的 ~:
中添加目录 'mysql'docker:~/docker$ ls -l
total 8
-rw-r--r-- 1 futur futur 674 Nov 5 04:35 docker-compose.yaml
drwxr-sr-x 2 futur futur 4096 Nov 5 04:37 mysql_dir
我将我的帐户添加到群组 'docker':
docker:~/docker$ grep docker /etc/group
docker:x:101:futur
在 up/down 我的 docker-compose 之后,我看到我的目录的权限发生了奇怪的变化:
docker:~/docker$ ls -l
total 8
-rw-r--r-- 1 futur futur 298 Nov 5 05:10 docker-compose.yaml
drwxr-sr-x 5 27 video 4096 Nov 5 05:11 mysql_dir
为什么变成'27'和'video'?那是什么?这正常吗?
这种行为会阻止我(用户 'futur')复制和移动目录 'mysql_dir'。
我应该只从 root 用户使用 docker 吗?有什么方法可以避免使用 root 用户来使用 docker 吗?
如果您 运行 docker exec <your_container> stat /var/lib/mysql
在您的主机上,检查 /var/lib/mysql
文件夹 在容器 中的权限,那么您会看到它的 uid 是 27
(用户 mysql
),gid 是 27
(组 mysql
):
File: '/var/lib/mysql'
Size: 4096 Blocks: 8 IO Block: 4096 directory
...
Access: (0750/drwxr-x---) Uid: ( 27/ mysql) Gid: ( 27/ mysql)
...
当您在主机和容器之间挂载卷时,Docker 根据容器内的内容更改主机上挂载目录的权限(此处 uid=27
、gid=27
).
你从主机上看到的是正常的:27
是因为你的主机上没有任何用户 uid=27
,你看到 video
组,因为这组在您的主机上有 gid=27
(您可以通过 运行ning getent group video
验证)。
您可以更改 mysql
容器内的 uid 和 gid 以匹配主机上的那些,但我强烈建议您不要这样做。如果您想备份数据,您宁愿使用 volumes 而不是安装本地目录。