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下初始化一个新的实例运行。

+0

您是否检查过“码头日志”的输出? mysql日志?您是否考虑过用户权限问题?你有没有考虑使用MySQL客户端来运行你的SQL脚本? (例如'/ usr/bin/mysql path/to/script.sql') – mlg

+0

@mlg - 我确实看到它试图创建这个新用户,但root用户密码正常工作。我可以通过Dockerfile手动添加用户,如果可能的话,我只是不想这样做。 –

+0

sql脚本比创建用户更好;它可能最终成为启动脚本的好东西。你预见到需要一些额外的启动行动?它可能会帮助你完全解决这个问题。 – mlg

为我工作:停止docker并手动删除所有包含以前版本的MySQL数据的文件夹。

另外:不要忘记添加一个MYSQL_DATABASE环境VAR或它不会创建您指定的用户。