Почему хранилище db разделяется между всеми контейнерами MariaDB? - PullRequest
0 голосов
/ 17 июня 2020

Я обнаружил странное поведение Ma c в отношении Docker контейнеров, которые я создаю для MariaDB. Проблемы возникают каждый раз, когда я создаю контейнер MariaDB с помощью следующей команды:

 docker run --rm --name db1 --publish 3307:3306   --mount type=volume,source=dbvol,target=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=test  mariadb 

Я вижу две странные вещи:
- Во-первых, мне не нужно вводить пользователя или пароль для войдите на сервер, работающий на 3307. Я могу легко войти как root с помощью «mysql -P 3307»!
- Во-вторых, хотя для каждого нового контейнера я создаю, например, db1, db2, db3, et c. Я создаю новый том с docker volume create dbvol[dbvol2,dbvol3,etc.], хранилище db, похоже, используется для всех контейнеров. Итак, находясь внутри db2, я могу видеть все таблицы и данные, которые я добавил в db1, и наоборот.

Кто-нибудь может это объяснить? Я смущен. Это ошибка или я чего-то не знаю о томах контейнеров?

PS.

Только что обнаружил, что самодельная версия клиента mysql не учитывает флаг P (порт). Фактически, он открывает мою локальную базу данных хоста. Я думал, что он использует базу данных контейнеров.

1 Ответ

1 голос
/ 17 июня 2020

Кажется, что все ваши контейнеры работают с томом с именем dbdata: хотя вы создали dbvol{1,2,3}, вы должны указать его на source вашего монтирования - разное для каждого экземпляра:

docker run --rm --name db1 --publish 3307:3306 --mount type=volume,source=dbvol1,target=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=test mariadb
docker run --rm --name db3 --publish 3308:3306 --mount type=volume,source=dbvol2,target=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=test mariadb
docker run --rm --name db2 --publish 3309:3306 --mount type=volume,source=dbvol3,target=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=test mariadb

Когда источник - это имя несуществующего тома, он автоматически создается для вас. Подробнее о креплениях можно прочитать здесь .

О пользователе / ​​пароле для входа в систему: вы это сделали сразу после запуска контейнера? Поскольку при первом запуске контейнера он запускает процесс инициализации, а затем перезапускает сервер, тогда все разрешения должны быть в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...