Dies ist, was ich sehe, wenn ich in den Behältern von Docker-compose erstellt am:mysql_user nicht in Benutzertabelle erstellt bei der Verwendung von Docker-komponieren
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
in der Benutzer-Tabelle nicht vorhanden ist.
In docker-compose.yml
Ich habe dies:
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:
I dbuser erwartet automatisch erstellt werden, aber das ist nicht geschehen.
Ich habe auch eine SQL-Datei, um meine Datenbank und Tabellen zu erstellen, wenn sie nicht bereits vorhanden sind, aber gerade Tomcat kann keine Verbindung zu meiner Datenbank herstellen.
Die gleichen Symptome wie diese question, aber ich benutze bereits ein Wörterbuch für meine Benutzernamen/Passwörter.
UPDATE:
Ich bin immer in der Nähe. Wenn ich das tue:
docker-compose exec db /bin/bash
Und dann tun:
/docker-entrypoint-initdb.d/create_users.sh
Dann, wenn ich das tue ich sehe:
mysql> SHOW GRANTS for dbuser;
+---------------------------------------------+
| Grants for [email protected]% |
+---------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'%' |
+---------------------------------------------+
Dann konnte ich meine Anwendung auf meinem Tomcatbediener implementieren und Ich habe keine Fehlermeldung erhalten, dass dbuser den Zugriff verweigert wurde.
Also, warum habe ich diesen Befehl selbst ausgeführt habe, soll es von Docker-compose ausgeführt wurde, nach den mysql docker docs unter eine neuen Instanz initialisieren.
Haben Sie die Ausgabe von 'docker logs' überprüft? Die MySQL-Protokolle? Haben Sie Probleme mit Benutzerberechtigungen in Betracht gezogen? Haben Sie in Betracht gezogen, den MySQL-Client zum Ausführen Ihres SQL-Skripts zu verwenden? (z. B. '/ usr/bin/mysql Pfad/zu/script.sql') – mlg
@ mlg - Ich habe gesehen, dass es versucht, diesen neuen Benutzer zu erstellen, aber das Root-Benutzerkennwort funktionierte. Ich kann den Benutzer manuell hinzufügen, über die Dockerfile, ich wollte das nicht tun, wenn es möglich ist. –
SQL-Skripts sind für mehr als das Erstellen von Benutzern gut; es könnte am Ende eine gute Sache sein, ein Startskript zu haben. Erwarten Sie zusätzliche Startup-Aktionen? Es könnte Ihnen helfen, damit insgesamt umzugehen. – mlg