Ich versuche, einen Docker-Container für die Arbeit mit einer lokalen Datenbank einzurichten.
Das Bild ist dieseshttps://hub.docker.com/r/tuxgasy/dolibarr/und es wird vorgeschlagen, auch einen mariadb
Container zu erstellen und ihn damit zu verknüpfen.
Ich möchte den Dolibarr-Container so konfigurieren, dass er stattdessen die mariadb
Datenbank verwendet, die ich bereits auf meinem Hauptsystem habe und die aus dem Haupt-Repo meiner Distribution installiert wurde.
Dies ist das erste Mal, dass ich versuche, eine funktionierende Docker-Anwendung einzurichten, und ich bin kein großer Experte in Sachen Datenbankwartung, daher bin ich etwas ratlos.
Wie kann ich das machen? Bitte halten Sie die Anweisungen so klar und detailliert wie möglich.
Mein System ist ein vollständig aktualisiertes openSUSE Tumbleweed.
Antwort1
Es gibt drei Möglichkeiten:
Verwenden Sie die Option --net=host. Dieser Netzwerkmodus bedeutet im Wesentlichen, dass der Container direkten Zugriff auf localhost hat und Sie nun auf localhost:3306 zugreifen können. Hier ist der Befehl
docker run --net=host ... tuxgasy/dolibarr
Verbinden Sie sich dann mit MariaDB mit
localhost:3306
Hängen Sie den MariaDB-Socket in den Docker-Container ein und stellen Sie über den Socket eine Verbindung zu MariaDB her. Wenn Sie beispielsweise den Speicherort des Sockets auf /var/run/mysqld/mysqld.sock konfigurieren, können Sie diesen als Verbindungspunkt einhängen und verwenden.
docker run -v /var/run/mysqld:/mariadb_socket ... tuxgasy/dolibarr
Stellen Sie dann über den Socket
/mariadb_socket/mysqld.sock
Ihrer App eine Verbindung zu MariaDB herVerwenden Sie die IP des Docker-Hosts. Holen Sie sich zunächst die Host-IP-Adresse im Docker-Netzwerk (in Linux geben Sie ein
ip addr show
und suchen Sie nach demdocker0 ip). Das ist normalerweise so etwas wie172.17.0.1(Ihre Erfahrung kann variieren). Dann sollten Sie in der Lage sein, diese IP-Adresse zu verwenden, um beispielsweise eine Verbindung zu MariaDB herzustellen172.17.0.1:3306
NOTIZ:... bedeutet alle anderen Optionen, die Sie möglicherweise bereits verwenden
Antwort2
Ab Docker v18.03+ können Sie diehost.docker.internalHostname für die Verbindung mit Ihrem Docker-Host.
Dies dient Entwicklungszwecken und funktioniert nicht in einer Produktionsumgebung außerhalb von Docker Desktop.
Antwort3
Ich habe einen Docker-Container erstellt, um genau das zu tunhttps://github.com/qoomon/docker-host
Sie können dann einfach den Containernamen DNS verwenden, um von innerhalb eines Containers auf das Hostsystem zuzugreifen, z. B. curlhttp://dockerhost:9200
Antwort4
Bedenken Sie, dass qoomon/docker-host nicht besser ist als jede andere Methode. Sie müssen Ihre Anwendung auf dem Docker-Host so konfigurieren, dass sie an die Docker-Bridge gebunden ist und auf sie hört, bevor sie zugänglich ist. Meiner Meinung nach fügt qoomon/docker-host dem Netzwerkpaket nur eine zusätzliche Schicht hinzu, die keinen wirklichen Vorteil bietet.
Dies ist die Kopie der README-Datei für qoomon/docker-host, die anscheinend übersehen wird. „Auf Linux-Systemen müssen Sie Ihre Host-Anwendungen zusätzlich zu localhost(127.0.0.1) an das Bridge Network Gateway binden, wenn Sie sie über den Docker-Host-Container erreichen möchten. Verwenden Sie den folgenden Docker-Befehl, um die IP-Adresse des Bridge Network Gateway abzurufen.“