Какая-то странная (или нет) вещь с mysql 'volume' - PullRequest
0 голосов
/ 05 ноября 2018

Просто создайте службу базы данных с помощью 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» и «видео»? Что это такое? Это нормально?

Такое поведение не позволяет мне копировать и перемещать каталог «mysql_dir» (пользователь «futur»).

Должен ли я использовать докер только от пользователя root? Есть ли способ использовать Docker, чтобы избежать использования пользователя root?

1 Ответ

0 голосов
/ 05 ноября 2018

Если вы запустите docker exec <your_container> stat /var/lib/mysql на своем хосте, чтобы проверить разрешения для /var/lib/mysql папки в контейнере , то вы увидите, что его uid равен 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, потому что у этой группы gid=27 на вашем хосте. (Вы можете проверить это, запустив getent group video).

Вы можете изменить mysql uid и gid внутри контейнера, чтобы они соответствовали тем, которые установлены на вашем хосте, но я настоятельно не рекомендую вам делать это. Вместо того, чтобы монтировать локальные каталоги, вы бы предпочли использовать тома , если вы хотите сделать резервную копию ваших данных, например.

...