mysql_user泊坞窗,构成
问题描述:
这是我看到的时候,我在由搬运工,撰写创建容器:mysql_user泊坞窗,构成
mysql> SELECT user FROM mysql.user;
+------+
| user |
+------+
| root |
+------+
1 row in set (0.00 sec)
mysql> exit
Bye
[email protected]:/# echo $MYSQL_USER
dbuser
dbuser
没有出现在用户表。
在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
web:
# build: . # Look in the current directory for a Dockerfile and build images using it
image: me/tomcat:v1
depends_on: # Link web container to db container
- db
environment: # Set up environment variables
MYSQL_DATABASE: mydb
MYSQL_ROOT_PASSWORD: password
ports:
- "8080:8080" # Forwards the exposed port 8080 on the container to port 8080 on the host machine
volumes:
my-datavolume:
我预计会自动创建dbuser的,但这种情况并未发生。
我也有一个sql文件来创建我的数据库和表,如果他们不存在,但现在tomcat无法连接到我的数据库。
与此相同的症状question,但我已经使用字典作为我的用户名/密码。
UPDATE:
我越来越接近。如果我做的:
docker-compose exec db /bin/bash
然后执行:
/docker-entrypoint-initdb.d/create_users.sh
然后我做到这一点时,我看到:
mysql> SHOW GRANTS for dbuser;
+---------------------------------------------+
| Grants for [email protected]% |
+---------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'%' |
+---------------------------------------------+
然后我能到我的应用程序部署到我的Tomcat服务器和我没有得到有关dbuser被拒绝访问的错误。
那么,我为什么要运行此命令自己,应该由码头工人,撰写根据mysql docker docs下初始化一个新的实例运行。
答
为我工作:停止docker并手动删除所有包含以前版本的MySQL数据的文件夹。
另外:不要忘记添加一个MYSQL_DATABASE
环境VAR或它不会创建您指定的用户。
您是否检查过“码头日志”的输出? mysql日志?您是否考虑过用户权限问题?你有没有考虑使用MySQL客户端来运行你的SQL脚本? (例如'/ usr/bin/mysql path/to/script.sql') – mlg
@mlg - 我确实看到它试图创建这个新用户,但root用户密码正常工作。我可以通过Dockerfile手动添加用户,如果可能的话,我只是不想这样做。 –
sql脚本比创建用户更好;它可能最终成为启动脚本的好东西。你预见到需要一些额外的启动行动?它可能会帮助你完全解决这个问题。 – mlg