Problem mit Docker?
Problem mit Docker
und zwar haut bei mir der Befehl
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
nicht hin.
Ich erstelle ein Image über ein Dockerfile (docker build -t [name] .)
Das Image basierd auf debian:latest
Danach wird apt-get update & apt-get upgrade ausgeführt
Dann werden Komponenten installiert (sudo, apache2, php, cron, ...)
und wiederum danach werden die apache2 Konfigurierung angepasst das der Apache2-Server auf /webserver das DocumentRoot setzt
Soweit alles gut.
jetzt kann ich über den docker run befehl den parameter --mount hinzufügen und darüber ein externes Verzeichnis auf /webserver binden.
Bis hier her Funktioniert alles noch.
Jetzt wenn ich eine index.html aufrufe funktioniert das eine index.php funktioniert auch. Wenn ich jetzt jedoch in der .php Datei folgenden code Benutze(um auf MySql - Server zuzugreifen zu können):
$mysqli = new mysqli("host_ip","bn","pw","tabelle");
//echo mysqli_get_host_info($mysqli);
if ($mysqli->connect_errno) {
echo "Verbindung fehlgeschlagen: " . $mysqli->connect_error;
return false;
}else{
return $mysqli;
}
Kommt ein 500-ServerError.
Soweit ich es jetzt ergoogeln konnte muss ich zusätzlich den Port 3306(MySql-Port) Exposen und zusätzlich mit -p 3306:3306 in den docker run befehl einbauen.
Außerdem muss man antscheinend mit
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
Das MySqli modul installieren & aktivieren.
Hier ist auch schon das Problem:
Wenn ich mit oben genannten befehl mein Image aus dem Dockerfile erstellen möchte kommt (wenn er an der Stelle mit "RUN docker-php..." ankommt):
RUN docker-php-ext-install mysqli
---> Running in bce06404a5ca
/bin/sh: 1: docker-php-ext-install: not found
The command '/bin/sh -c docker-php-ext-install mysqli' returned a non-zero code: 127
Und jetzt meine Frage wie kann ich diesen fehler Beheben, ich weiß leider nicht mehr weiter!
Für die vollständigkeit hier noch der docker run befehl(den ich benutze wenn ich das Funktionierende Image ohne "RUN docker-php-..." nutze):
docker run --name webserver \
-p 80:80 \
-p 3306:3306 \
--mount type=bind,source="/lokaler/pfad",destination=/webserver [name_des_images]
Anmerkung 1:
Ich möchte auf einen extern gehosteten Mysql - Server zugreifen (im lokalen netz aber extern vom Host-PC des docker-containers)
2 Antworten
Probier die ganzen Images zu builden mit Hilfe einer docker-compose Datei, so kannst du die ganzen Container/Volumes mit einem Befehl starten.
Wahrscheinlich läuft bei dir die lokale Datenbank auf localhost oder? Wenn du innerhalb des Docker Container localhost angibst, um dich mit der Datenbank zu verbinden, wird es nicht funktionieren da der Container selbst localhost ist.
Probier es mal mit host.docker.internal
Läuft mysql auch über Docker? Dort kann es sein, dass sich der Port ständig ändert, solltest du keinen fixen definiert haben.
Mach mal docker ps und schau auf welcher IP und Port der Container läuft
Bzw welcher Fehler kommt wenn du connecten willst?
der MYSQL - Server läuft auf einem Physischen Rechner keine VM und auch kein Docker Container, Service o. ä.
docker-compose abstrahiert das Starten und Laufen von Containern, nicht von Images.
Das ist kein Ersatz fuers Dockerfile.
Hier werden ein paar Dinge vermischt/verwechselt.
docker-php-ext-install kommt aus dem offiziellen PHP Image, d.h. du musst von dem abspringen um das benutzen zu koennen.
Port 3306 musst du nicht exposen, du hast den ja im Container nicht auf, sondern moechtest dich nur von dem Container zu einem Port 3306 verbinden.
Grundsaetzlich kann ich verstehen, wenn man selbst probieren moechte sich Container Images zu bauen; aber gerade fuer LAMP/LEMP Stacks gibts alles offiziell von Docker. Das laeuft out-of-the-box und du hast damit keinen Aufwand mehr und musst das Image nicht selbst pflegen.
Fuer alles weitere waere es fuer uns hilfreich wenn du das Dockerfile mal irgendwo hochlaedst.
Nein an das habe ich gedacht bei mir sieht es wie folgt aus:
192.168.178.10 = MySql-Server
192.168.178.11 = Docker-Host-Server
Bei meinem Versuch zu meinem MySql-Server zu connecten nutze ich die host_ip "192.168.178.10" und nicht "localhost"
Und wenn ich mit den Selben benutzerdaten von meinem 2-Server (192.168.178.12) versuche direkt (Apache2 und PHP direkt installiert ohne docker etc.) wieder über die host_ip 192.168.178.10 auf meinen MySql-Server zu kommen funktioniert das