Вот что я вижу, когда нахожусь в контейнере, созданном docker-compose:
mysql> SELECT user FROM mysql.user;
+------+
| user |
+------+
| root |
+------+
1 row in set (0.00 sec)
root@541e4d686184:/# echo $MYSQL_USER
dbuser
Таким образом, dbuser
отсутствует в таблице пользователей, хотя $MYSQL_USER
установлен правильно.
В docker-compose.yml
у меня есть это:
version: '2'
services:
db:
image: mysql:latest
environment:
MYSQL_DATABASE: mydb
MYSQL_USER: dbuser
MYSQL_PASSWORD: userpass
MYSQL_ROOT_PASSWORD: password
ports:
- "3306"
volumes:
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
- my-datavolume:/var/lib/mysql
volumes:
my-datavolume:
Я ожидал, что dbuser
будет создан автоматически, но этого не произошло.
У меня также есть файл sql
для создания моей базы данных и таблиц, если они еще не существуют, но прямо сейчас tomcat не может подключиться к моей базе данных.
Те же симптомы, что и в этом вопросе, но я уже использую словарь для своих имен пользователей/паролей.
ОБНОВЛЕНИЕ:
Я приближаюсь. Внутри контейнера я вручную сделал:
/docker-entrypoint-initdb.d/create_users.sh
Затем пользователь был создан внутри таблицы MySQL
, и я смог развернуть свое приложение на своем сервере tomcat
, и я не получил ошибку об отказе в доступе dbuser
.
Итак, почему я должен был запускать эту команду сам, она должна запускаться docker-compose, согласно документы mysql docker в разделе Инициализация нового экземпляра.
docker logs
? Логи mysql? Рассматривали ли вы проблемы с правами пользователей? Рассматривали ли вы возможность использования клиента mysql для запуска вашего сценария sql? (например,/usr/bin/mysql < /path/to/script.sql
) - person mlg   schedule 31.12.2016