这是我在 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
设置正确,也不会出现在 users 表中。
在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 运行,根据Initializing a fresh instance下的mysql docker 文档。