2016-12-31 2 views
3

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.

+0

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 mlg

+0

@ 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. –

+0

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

Antwort

0

Arbeitete für mich: Stop Andocker und entfernen Sie manuell alle Ordner mit MySQL-Daten aus früheren Builds.

Auch: vergessen Sie nicht, eine MYSQL_DATABASE Umgebung var hinzuzufügen, oder es wird nicht den von Ihnen angegebenen Benutzer erstellen.

Verwandte Themen