[Howto] MariaDB + phpMyAdmin im Docker-Container

  • Da ich merke, dass es wohl einige Leute gibt, die mit MariaDB, phpMyAdmin und NextCloud über Docker Probleme haben, habe ich mich mal hingesetzt und versucht ein Schritt-für-Schritt-Tutorial zu bauen. Der erste Teil beschäftigt sich mit MariaDB und phpMyAdmin über Docker. Bei beiden verwende ich die offiziellen Docker-Images. Bitte seht dieses kleine Mini-Tutorial lediglich als Leitfaden. Ich kann nicht sicherstellen, dass die Schritte auf allen Systemen identisch sind oder nicht irgendwo Probleme verursachen.


    0) Allgemein: Docker-Container auf Qnap-NAS erstellen

    • auf QTS einloggen
    • Start der Container Station
    • Wechsel auf die Seite "Container erstellen"
    • Auswahl des Images und Klick auf "Erstellen"
      ACHTUNG:
      Ist das zu verwendende Docker-Image lokal noch nicht vorhanden, so wird auf meinem System lediglich eine fast leerer Dialog angezeigt, der die durch das Image nach außen geführten Eigenschaften nicht richtig bzw. komplett anbietet. Dabei handelt es sich in meinen Augen um ein Fehler in der Container Station/QTS. Damit der Dialog direkt beim Erstellen alle möglichen Eigenschaften des Images anbietet, empfehle ich hier ohne große Einstellungen einmal direkt auf "Erstellen" zu klicken um das gewünschte Image damit lokal zur Verfügung zu stellen. Nachdem der Container erzeugt wurde, kann dieser direkt auch wieder gelöscht und erneut auf "Erstellen" geklickt werden. Nun kann direkt Das Image bleibt somit weiter lokal zur Verfügung. Ein anderer Weg wäre, das gewünschte Image per SSH und Docker direkt auf das lokale System zu pullen. Dies ist jedoch etwas aufwendiger und für Anfänger relativ fehleranfällig.
    • Einstellen der Eigenschaften für den Container
    • Bestätigen der Einstellungen mit "Erstellen"

    (!) Bitte beachten
    Um sämtliche Einstellungen eines Images für seinen Container korrekt festlegen zu können, ist ein Blick in die dazugehörige Dokumentation immer ratsam. Die meisten Images inkl. deren Beschreibungen und Quellcodes können direkt auf dem Docker-Hub (https://hub.docker.com) vorgefunden werden.


    1) MariaDB + phpMyAdmin: MariaDB-Container auf Qnap-NAS erstellen

    • Auswahl des Images "MariaDB", Klick auf "Erstellen" und Einstellung des Container-Namens
      MariaDB-Container erstellen - Schritt 1.png
      Im ersten Schritt ist der Container-Name (Feld 1) zu vergeben. Dieser muss lokal eindeutig sein. Im Normalfall ist hier nichts anzupassen. Der hier vergebene Name wird später für phpMyAdmin benötigt. Die restlichen allgemeinen Eigenschaften können ebenfalls beim Standard verbleiben. Nachdem alles für euch passend konfiguriert ist, genügt ein Klick auf "Erweiterte Einstellungen".
    • benötigte Umgebungsvariablen für MariaDB festlegen
      MariaDB-Container erstellen - Schritt 2.png
      Um die Umgebungsvariablen des Docker-Containers festzulegen, müsst ihr in den erweiterten Einstellungen auf die Seite "Umgebung" wechseln. Danach seht ihr eine Liste der Variablen und deren Werte. Die dort sichtbaren Variablen werden unter dem entsprechenden Namen und mit dem festgelegten Wert an den Container übergeben. Diese stehen dann dem Container für seine Zwecke zur Verfügung. Es werden nicht immer alle konfigurierbaren Umgebungsvariablen nach außen geführt. Wichtig ist für das offizielle MariaDB-Image die Umgebungsvariable "MYSQL_ROOT_PASSWORD". Da diese Variable nicht nach außen geführt wird, muss diese per Klick auf "Hinzufügen" angelegt werden. Diese Variable legt das Root-Passwort der MariaDB-Instanz fest. Mit diesem Passwort könnt ihr euch später an der Datenbank zur Administration anmelden.
    • Datenablage der Datenbanken außerhalb des Containers festlegen
      MariaDB-Container erstellen - Schritt 3.png
      Wird dieser Schritt übersprungen, so wird innerhalb des Containers ein extra Datenbereich angelegt, welcher sämtliche MariaDB-Datenbanken und den Zustand von MariaDB beinhaltet. Um später auch Updates der Container durchführen zu können, ohne dass unsere Datenbanken oder der Zustand verloren geht, wird über das Image ein Volume zur Verfügung gestellt. Dieses wird durch den Anbieter definiert und kann lediglich durch ein Host-Volume ersetzt werden. Das Host-Volume legen wir in diesem Schritt fest (Feld 2 + 3). In meinem Fall steht der lokale Ordner "/Public/mariadb-data" im Container für MariaDB unter "/var/lib/mysql" zur Verfügung. Da es sich um eine Art Mount-Point handelt, wirkt sich eine Änderung lokal direkt im Container und andersherum aus.
    • Erstellen des Containers
      Nach Klick auf "Erstellen" hat unser NAS einiges zu tun. Nach einem kleinen :cup: sollte MariaDB mittels Docker laufen. Prüfen könnt ihr dies, indem ihr euch die Konsolenausgabe (unterer Teil in der Container Station - einfach den entsprechenden Docker-Container mit dem richtigen Namen anklicken) anschaut und auf Fehler prüft. Wenn ihr nun den verknüpften Daten-Ordner für den MariaDB-Container auf eurem NAS kontrolliert, so sollten dort schon einige Dateien zu finden sein. Diese wurde vom Container angelegt und spiegeln die Standarddatenbank "mysql" und den Zustand deren wider.

    2) MariaDB + phpMyAdmin: phpMyAdmin-Container auf Qnap-NAS erstellen und mit MariaDB verbinden

    • Auswahl des Images "phpMyAdmin", Klick auf "Erstellen" und Einstellung des Container-Namens
      phpMyAdmin-Container erstellen - Schritt 1.png
      Im ersten Schritt ist wieder der Container-Name (Feld 1) zu vergeben. Es gelten dieselben Richtlinien (wie Eindeutigkeit), wie bei MariaDB. Nachdem alles für euch passend konfiguriert ist, genügt wieder ein Klick auf "Erweiterte Einstellungen".
    • MariaDB und phpMyAdmin miteinander vebinden, damit eine gesicherte Kommunikation zwischen diesen Containern erfolgen kann
      phpMyAdmin-Container erstellen - Schritt 2.png
      Nachdem in die erweiterten Einstellungen gewechselt wurde, befindet man sich, wie auch schon im vorherigen Fall, auf der Seite "Link". Über diese Seite können Docker-Container miteinander verbunden werden. Um eine Verbindung herzustellen reicht ein Klick auf "Hinzufügen" und die richtige Konfiguration der entsprechenden Werte. In der Combobox in der Spalte "Link" ist in unserem Falle der Name des Docker-Container von MariaDB (der im vorherigen großen Schritt erzeugt wurde) auszuwählen. Als Alias ist laut Dokumentation von phpMyadmin die Bezeichnung "db" zu wählen. Damit steht später MariaDB über den Hostname "db" dem phpMyAdmin-Container zu Verfügung. Ist dies getan, so konfigurieren wir nun im letzten Schritt noch unser Netzwerk mit einem Klick auf "Netzwerk".
    • Konfiguration des Ports, um auf den Webserver in unserem phpMyAdmin-Container über den Host zugreifen zu können
      phpMyAdmin-Container erstellen - Schritt 3.png
      Dieser Schritt wird nicht unbedingt benötigt, ist jedoch dann wichtig, wenn ich die phpMyAdmin-Instanz direkt über die Adresse des NAS erreichen möchte. Im Normalfall wählt Docker beim Start des Containers einen zufälligen Port für jeden Port, der durch den Container nach außen gegeben werden soll. In unserem Fall verwendet der phpMyAdmin-Container den Standardport 80 für eine unsichere Verbindung (Standardport für Standard HTTP-Anwendungen) zum Webserver. Um über den Host auf den Webserver des Containers zugreifen zu können, kann jedoch nicht in jedem Fall direkt der Port 80 verwendet werden, da Docker ja nicht weiß, ob dieser Port bereits durch den Host belegt ist. Daher wird wird bei Nichtkonfiguration ein zufälliger, freier Port verwendet. Dieser kann hier auf einen festen Port gelegt werden. In meinem Beispiel der Port 9080. Ist mein NAS über den Namen "testnas" erreichbar, so ist die phpMyAdmin-instanz des Containers über http://testnas:9080 erreichbar.
      Nachdem hier alles entsprechend konfiguriert wurde, kann der phpMyAdmin-Container per "Erstellen" erstellt werden.

    3) MariaDB + phpMyAdmin: phpMyAdmin im Browser verwenden

    • Browser starten und Über Namen des "http://<Namen oder IP des NAS>:<Port>" phpMyAdmin aufrufen
      phpMyAdmin in Aktion - Schritt 1.png
      Wenn alles korrekt konfiguriert wurde, solltet ihr nun die Login-Seite von phpMyAdmin sehen. Als Benutzname "root" und als Passwort das beim MariaDB-Container erstellen angegebene Passwort verwenden.
    • Danach solltet ihr auf der Admin-Seite zur Konfiguration eurer MariaDB-Datenbank landen
      phpMyAdmin in Aktion - Schritt 2.png


    Das war's dann erstmal von mir. Ich hoffe, ihr könnt/konntet mit der kleinen :handbuch: etwas anfangen.
    Und nun viel Spaß beim Nachmachen ... :qnap:


    Ciao
    ariaci

  • Ich bekomme den Fehler:

    Code
    mysqli_real_connect(): (HY000/1045): Access denied for user 'root'@'10.0.3.3' (using password: YES)

    wenn ich mich einloggen will.


    Kann mir da jemand helfen?

  • Ich bekomme genau den selben Fehler wie kpleines:

    Code
    mysqli_real_connect(): (HY000/1045): Access denied for user 'root'@'10.0.3.1' (using password: YES)


    woran liegt das, ich habe alles wie in der Anleitung gemacht.

  • Hallo,


    danke für die Anleitung. Ich wollte mir Nextcloud auf mein NAS (TS-431P) installieren. Dazu wird PHP 7 gebraucht, also komme ich um die Container wohl nicht herum.

    Mein Problem ist nun, dass ich das Image für MariaDB nicht runterladen kann, es erscheint der

    Code
    error: No matching manifest for linux/arm in the manifest list entries. 

    Ich dachte mir, dass ich auf bitnami/mariadb oder linuxserver/mariadb ausweichen könnte, diese lassen sich nämlich runterladen. Aber die Console eines solchen erstellen Containers sagt:

    Code
    standard_init_linux.go:185: exec user process caused "exec format error" 

    und der Container stoppt.


    Edit: Gleiches gilt für den phpmyadmin/phpmyadmin Container. Er lässt sich einrichten, hat aber den Fehler

    Code
    standard_init_linux.go:185: exec user process caused "exec format error"

    Edit 2: So wie ich das sehe ist die CPU das Problem hierbei. Die arm32 Container laufen, der Rest nicht.

    Edit 3: Funktioniert nun, habe dazu die Container apcheamitru/arm32v7-mariadb und sk278/phpmyadmin-armhf im Einsatz. phpMyAdmin war übrigens nicht über nasname.myqnapcloud.com:9080 erreichbar, sondern nur über 192.xxx.xxx.xxx:9080 :)


    NAS: TS-431P

    Firmware Version: 4.3.5.0713

    3 Mal editiert, zuletzt von BaWsLjus ()

  • Hi,


    bei mir läuft das jetzt alles aber wie kriege ich z.B. Moodle Installationsassistenten dazu, was bei mir im Web Verzeichnis liegt, auf die Container Mariadb und php7 zuzugreifen? Hab das ganze mit dem Container Sinn noch nicht durchschaut!


    Kriege immer nur die Fehlermeldung, dass die Version 3.4 von Moodle php7 voraussetzt. Ich dachte deswegen den Umweg über Container nutzen zu müssen.

    Wie kriegt man die Moodle dazu( liegt im Web-Verzeichnis) auf die installierten Container Mariadb und Php 7 zuzugreifen?

  • Unter dem Punkt:

    "2) MariaDB + phpMyAdmin: phpMyAdmin-Container auf Qnap-NAS erstellen und mit MariaDB verbinden"

    wird die "Link" Funktion verwendet, um die Container untereinander zu verbinden.

    Diese Funktion wird mit der Container Station V1.10 abgeschaftt. Siehe: https://docs.docker.com/network/links/

    Siehe Screenshot


    Gibt es eine Lösung für die Anleitung in diesem Thread?Foto.png

  • Moin!


    Das endet bei mir mit

    Code
    error: exec: "/usr/local/bin/docker-entrypoint.sh": stat /usr/local/bin/docker-entrypoint.sh: permission denied"


    Klingt nach Zugriffsrechten. Aber wie komme ich an den nicht gestarteten Container?


    lg danio

  • Um das Thema nochmal aufzugreifen:

    Wie können verschiedene Docker Container miteinander verbunden werden, wenn die Link Funktion fehlt?


    Wenn zB phpmyadmin und mariadb im Bridge Netzwerk laufen, stellen sie doch virtuelle Server mit eigenen IP Adressen dar.

    Wie kann man die Konfiguration so ändern, dass es funktioniert?

  • Hi,


    Eigentlich ist es einfach:


    Code
    PMA_HOST=IP Adresse des QNAP DB-Servers
    PMA_PORT=Portnummer der Datenbank auf die man von außen zugreifen kann(3306).
  • Hallo zusammen,


    ich möchte mir als Container eine MariaDB installieren. (soll für verschiedene Anwendungen genutzt werden: Nextcloud, Pydio, mehrere Kodi-Instanzen...)


    Leider scheitere ich schon seit Stunden daran, den MariaDB-Container ans Laufen zu bekommen.

    Ich erhalte die gleichen Fehlermeldungen welche weiter oben im Thread schon genannt wurden:

    Code
    2020-01-11 22:50:24+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.4.11+maria~bionic started.
    2020-01-11 22:50:24+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
    error: exec: "/usr/local/bin/docker-entrypoint.sh": stat /usr/local/bin/docker-entrypoint.sh: permission denied

    Der Container bleibt weiter als "gestoppt" in der Übersicht in der Container Station. Ich bin davon ausgegangen, dass es sich um ein Berechtigungsproblem handelt. Im Ordner /usr/local/bin/ ist ein derartiges Skript jedoch nicht vorhanden.


    Ich habe schon die Berechtigungen des Share-Folders geändert auf o+rwx, was aber auch zu keinem Erfolg führte.

    Freigabeordner ist verknüpft: /var/lib/mysql > /share/Container/mariadb-config (Lesen/Schreiben)


    Container wurde schon in verschiedenen Versionen getestet (latest/10.4.11), ich hatte auch schon "mysql-Container" ausprobiert.

    Überall die gleiche Fehlermeldung.


    Hat das Problem schon jemand lösen können? Oder ne Idee?

  • Ich hab das mit dem Link noch nicht ganz verstanden.

    Welchen Container soll ich auf Bridge stellen? Und soll eine statische oder eine dynamische IP-Adresse verwendet werden?

  • Das mit dem link von MariaDB zu PHPMyAdmin habe ich nicht hinbekommen, bei PMA_* geht es ja um die IP Adresse und den Port, aber das default schema kann ich da nicht angeben. Ich habe dann einfach einen MySQL Workbench lokal installiert und mit MariaDB verbunden, das klappt einwandfrei, da kann ich IP Adresse, Port und default schema festlegen.

  • Wenn ich versuche 2 weitere Parameter hinzuzufügen kommt die Fehlermeldung:


    Code
    "Bitte geben Sie Informationen ein oder entfernen Sie überflüssige leere Felder, um fortzufahren."

    Habe das gleiche Problem.

    Ich habe mariadb nach obiger Anleitung installiert, außer das ich unter network bridge gemacht habe.

    dann phpmyadmin auch mit bridge, aber ich checke einfach nicht, wie ich die verbindung zu mariadb hinbekomme.


    update:

    Lösung: in der Variable PHP_MD5 (oder so ähnlich heisst die) steht nix drin, deswegen kann man keine neue Variable hinzufügen. Wenn man dort vorübergehend was eintippt, zb "1", dann kann man die zusätzlichen Variablen PMA_Host und PMA_Port hinzufügen. Ich habe nach dem Hinzufügen die "1" wieder rausgelöscht und alles gespeichert.

    Jetzt kann sich phpmyadmin auf der mariadb anmelden. (beide container sind im bridge modus, jeweils eigene IP).



    update2:

    alles funktioniert wie es soll. Ich habe mir für kodi eine zentrale datenbank angelegt und wollte das mit docker realisieren.

    Damit ich anderen die viele Leserei erspare ergänze ich nochmal kurz, wie es bei mir geklappt hat:


    - mariadb docker erstellen wie im ersten Post beschrieben, aber zusätzlich unter "network" auf "bridge" stellen und an einen virtuellen Switch hängen (mit eigener IP).


    - phpmyadmin docker erstellen mit den zusätzlichen Umgebungsvariablen PMA_Host (IP der mariadb) und PMA_Port (port ist wahrscheinlich nicht nötig, wenn man default 3306 verwendet, aber es schadet auch nicht). Wenn an bei dem hinzufügen einer neuen Variable eine fehlermeldung bekommt, dass ein feld nicht leer sein darf (bei mir war es das md5 feld), in dieses feld vorübergehend was reinschrieben, dann die neuen variablen hinzufügen, und dann den Platzhalter wieder rauslöschen und alles speichern. Wenn man will, kann man noch andere variablen mitgeben, siehe https://hub.docker.com/r/phpmyadmin/phpmyadmin/

    Unter "network" wie beim mariadb-docker auf "bridge" und mit eigener IP an den gleichen virtuellen Switch wie den mariadb-docker.


    danke von meiner Seite an den thread-ersteller, diese Infos haben mir die Arbeit sehr erleichtert.

  • Hallo Robertson23,


    ich habe es nun genau nach Deiner Anleitung bei mir versucht:

    Ich habe zwei Container erstellt mit jeweils fester IP (MariaDB: 192.168.0.139, PHPMyAdmin: 192.168.0.140) und beide sind mit dem selben virtuellen Switch verbunden.

    Beim Erstellen des PHPMyAdmin Containers habe ich dann PMA_Host mit 192.168.0.139 und PMA_Port mit 3306 angegeben. Wenn ich nun über http://192.168.0.140 auf PHPMyAdmin zugreife und versuche, mich anzumelden, bekomme ich diese Fehlermeldung:


    Screenshot 2020-04-30 08.06.28.png


    Wenn ich nun in der Übersicht der Container Station auf den PHPMyAdmin Container klicke, wird der Container mit einer Fehlermeldung gestoppt:


    Screenshot 2020-04-30 08.10.48.png


    Was könnte für dieses Verhalten die Ursache sein?


    Vielen Dank und viele Grüße


    Harald