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=27gid=27 ).

你从主机上看到的是正常的:27 是因为你的主机上没有任何用户 uid=27,你看到 video 组,因为这组在您的主机上有 gid=27(您可以通过 运行ning getent group video 验证)。

您可以更改 mysql 容器内的 uid 和 gid 以匹配主机上的那些,但我强烈建议您不要这样做。如果您想备份数据,您宁愿使用 volumes 而不是安装本地目录。