mysql'volume'的一些奇怪(或不奇怪)的事情

时间:2018-11-05 08:58:18

标签: docker docker-compose 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吗?有什么方法可以避免使用root用户来使用docker?

1 个答案:

答案 0 :(得分:0)

如果您在主机上运行training,以检查容器中docker exec <your_container> stat /var/lib/mysql文件夹的权限,那么您将看到其uid为/var/lib/mysql (用户27)和gid为mysql(组27):

mysql

在主机和容器之间装载卷时,Docker会根据容器内部的内容(此处为 File: '/var/lib/mysql' Size: 4096 Blocks: 8 IO Block: 4096 directory ... Access: (0750/drwxr-x---) Uid: ( 27/ mysql) Gid: ( 27/ mysql) ... uid=27)更改主机上已装载目录的权限。

从主机上看到的结果是正常的:gid=27是因为您的主机上没有使用27的用户,并且您看到uid=27组是因为该组具有video在主机上(您可以通过运行gid=27进行验证)。

您可以更改容器内的getent group video uid和gid以匹配主机上的uid和gid,但是我强烈建议您不要这样做。例如,如果要备份数据,则最好使用volumes,而不是装入本地目录。