Mysql Datenbank in Docker. Insert von außerhalb per Batch in die Datenbank funktioniert nicht

blodern

Lt. Junior Grade
Registriert
Juni 2024
Beiträge
337
Hallo zusammen,

ich habe eine MySQL DB in Docker mit folgender Compose am laufen.

version: '3.8'
services:
mysql:
image: mysql:latest
container_name: mysql_container
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: testdb
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
volumes:
- /home/ubuntu/docker/mysql:/var/lib/mysql

Außerdem habe ich dazu noch phpmyadmin am laufen:
version: '3.1'

services:
phpmyadmin:
image: phpmyadmin
restart: always
ports:
- 8081:80
environment:
- PMA_ARBITRARY=1

Aufbau ist folgender:
date, time, name, dc, io, pc, status

Wenn ich im Management Studio bzw. phpmyadmin bin, kann ich mit folgendem Befehl meine Werte in die DB schreiben:
insert into testdb.logs (date, time, name, dc, io, pc, status) VALUES ('2025.07.11', '22:11', 'test', 'test', '+', 'test', 'test');

Versuche ich das ganze jetzt außerhalb mit einer Batch Datei mit folgendem Aufbau, dann funktioniert das ganze leider nicht.
sqlcmd -S 10.41.64.180,3306 -U root -P rootpassword "insert into testdb.logs (date, time, name, dc, io, pc, status) VALUES ('2025.07.11', '11:24', 'test', 'test', '+', 'test', 'test')";

Ich erhalte keine Fehlermeldung und weiß auch nicht wie ich die Ausgabe sauber umleiten kann.

Vielleicht hat hier jemand einen Anhaltspunk wo der Fehler liegen könnte?

Danke
 
Doofe Frage: Bist du sicher, dass 10.41.64.180 korrekt ist? Ich frag nur, weil das aus dem jetzt geposteten nicht hervor geht.
 
Ja, die IP ist richtig, dort läuft bei mir Docker.
 
Ja befindet sich im selben Subnetz.
Dieser Befehl auf eine MSSQL Instanz (auf einem anderen Server) funktioniert ohne Probleme nur in die Docker DB und MySQL funktioniert es nicht.
 
Auf meinen Dockercontainer mit MariaDB komme ich über die MySQL-Workbench über localhost:3006 vom Host-OS rein. Arbeite mit Windows und der Docker wsl2-Integration.
 
Von außen wirst du kaum auf dein internes Docker Netz kommen. Ein Reverse Proxy kann hier mit rein.

Versuch mal die IP von deinem PC und nicht docker. Ggf Ports öffnen, welches aber docker gemacht haben soll.
 
Du musst erstmal sicherstellen, dass du auf den im Docker laufenden Mysqld konnecten kannst.

wenn das TCP/IP Mäßig sichergestellt ist, kümmere dich um "Dinge mit dem Mysql"

Du scheint also deinen Server hier nicht zu erreichen: Woran liegt das?
Kannst mal netcat oder sowas zum Testen verwenden, oder nen regulären Mysql-Client?
 
Warum sollte ich von außen da nicht drauf kommen?
Ich habe ja den öffentlichen Port gemappt mit dem Docker internen Port.

Wenn ich andere Docker Instanzen habe, dann kommen ich da auch von meinem PC drauf um den Dienst zu nutzen.
 
Hast du denn dem Benutzer der Datenbank gesagt dass er von anderen IP's sich verbinden darf? Normalerweise ist der Benutzer immer mit username@localhost eingerichtet.
Und ... der Datenbank auch dass sie auf diese IP und nicht auf 127.0.0.1 hören soll?
 
  • Gefällt mir
Reaktionen: konkretor und JumpingCat
@d2boxSteve Das habe ich noch nicht geschaut. Muss ich auch erstmal schauen wie man das einstellt.
Ich komme auf jeden Fall von einem anderen Docker Container mit einem anderen Netzwerk (phpmyadmin) auf die Datenbank.
 
Das mag ja sein, hat aber dennoch nix damit zu tun, ob du vom Host an den Container kommst, also prüfe dies bitte einmal wie von mir beschrieben, dann schauen wir weiter..

Du solltest aufn connect schon das mysql-banner sehen können, Dinge wie "darf der Mysql user connecten mit die Rechten" kommen halt erst danach..
 
  • Gefällt mir
Reaktionen: sikarr und JumpingCat
Ich habe mir jetzt auf meinem PC, welche nichts mit Docker zu tun hab und komplett eigenständig ist, MySQL Workbench runtergeladen und installiert.
Nachdem habe ich die IP vom Docker Host System eingegeben mit Port vom DB Container und konnte die Verbindung ohne jegliche Probleme herstellen.

1752492678609.png

Ergänzung ()

Bin jetzt einen Schritt weiter gekommen. Jetzt sehe ich auch Fehlermeldungen:
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Protocol error in TDS stream.
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Client unable to establish connection due to prelogin failure.
 
Zuletzt bearbeitet:
Ähm, der "ODBC Driver 13 für SQL Server" ist für den Microsoft SQL Server, nicht für MySQL/MariaDB.

Woher stammt denn dieser "sqlcmd"?
 
sqlcmd ist das Plugin für CMD, damit in MSSQL geschrieben werden kann.

Da ich aber nicht mehr MSSQL verwenden will, versuche ich bisherige Sachen auf MySQL umzubauen.
Wird hier ein anderer Connector benötigt?
 
Zurück
Oben