docker - 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
在上/下我的 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”和“视频”?那是什么?这正常吗?
这种行为会阻止我(用户“futur”)复制和移动目录“mysql_dir”。
我应该只从 root 用户使用 docker 吗?有没有办法使用docker避免使用root用户?
解决方案
如果你在你的主机上运行,检查容器中文件夹的docker exec <your_container> stat /var/lib/mysql
权限,那么你会看到它的 uid 是(user ) 并且 gid 是(group ) :/var/lib/mysql
27
mysql
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
group 因为该组gid=27
在您的主机上(您可以通过运行来验证getent group video
)。
您可以更改mysql
容器内的 uid 和 gid 以匹配主机上的内容,但我强烈建议您不要这样做。与其挂载本地目录,不如使用volumes,例如,如果要备份数据。
推荐阅读
- c# - AspNetCore.Identity - 如何为新用户设置 LockoutEnabled = false
- c++ - 如何读取映射文件中的结构向量?
- pdfbox - 如何从PDF表格中提取数据点值?
- google-cloud-platform - 无法在 Python 3.7 运行时中使用 language_tool_python 部署 Cloud Function
- json - TSQL:JSON 路径中的递归下降
- angular - 角度文件多次上传,没有重复
- android - 无法解析“CellIdentityLte”中的方法“getEarfcn”
- casting - 在 YouTube 上获取 Cast 按钮以获取自定义投射解决方案
- sql - 从 sql select 返回过滤结果
- java - 如何使用本机查询在 JPA 中执行嵌套联接