База и пользователь в Docker
База и пользователь приложения
создаются на пустом томе
и не совпадают с root.
Образ читает переменные
MYSQL_DATABASE,
MYSQL_USER
и MYSQL_PASSWORD
при первой инициализации
хранилища и заводит
отдельную учётку для программы.
Пароль root задают отдельно.
Для чистого эксперимента
объявим свой том appdata,
чтобы старые файлы
не мешали новым именам.
Сервис db
на mysql:9.7:
services:
db:
image: mysql:9.7
environment:
MYSQL_ROOT_PASSWORD: demo
MYSQL_DATABASE: app
MYSQL_USER: app
MYSQL_PASSWORD: demo
volumes:
- appdata:/var/lib/mysql
volumes:
appdata:
Фоновый подъём
на пустом appdata
создаёт базу app
и пользователя app
с паролем demo:
docker compose up -d
Проверка входа под пользователем приложения, не под root:
docker compose exec db mysql -uapp -pdemo app -e "SELECT USER(), DATABASE();"
Клиент подключается
без ошибки доступа,
в ответе видны имя app
и текущая база app.
Если том уже содержал
старые файлы,
новые переменные
учётку не перезапишут -
нужен свежий том.
Задайте на пустом томе shopdata базу shop и пользователя shop с учебным паролем рядом с паролем root demo.
Убедитесь внутри сервиса, что вход под shop открывает базу shop без сообщения об отказе.