Datenbanken in Docker (mariaDB, PostgreSQL, MySQL)

wjavixxassuj

Benutzer
Mitglied seit
19. Sep 2021
Beiträge
101
Punkte für Reaktionen
10
Punkte
68
Hallo Zusammen,

eine Frage bezüglich Datenbanken auf einer Synology mit Docker.
Wenn ich Pakete installiere über Docker Compose dann ist mir aufgefallen, dass viele Anwendungen eine eigene DB in Docker installieren.

Bspw.:
  • Paperless -> Postgres DB
  • WikiJS -> MySQL DB
  • Redmine -> MySQL DB
  • Speedtest-tracker -> MariaDB oder Postgres DB
Jetzt stellt sich mir natürlich die Frage, wenn es mehr Docker Container werden, macht es dann Sinn eine MySQL Datenbank zu haben wo alle Container reinschreiben (bspw. 1x MySQL DB für WikiJS und Redmine) oder zwei getrennte? Dasselbe gilt natürlich auch für Anwendungen die mit einer Postgres und MariaDB arbeiten. Man kann ja im Docker Compose dann die entsprechenden Daten reinschreiben wie Benutzername und Passwort.

Dann stell sich mir auch die Frage, wie kann ich den Inhalt der Datenbanken mir anzeigen lassen?
Geht das bspw. mit Heidi SQL oder Microsoft SQL Studio oder nur über das Terminal im Docker?
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Also bei mir schreiben alle Container in eine mariadb. Dazu hat jeder Container einen eigenen User in der mariadb mit entsprechend eingeschränktem Zugriff
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.605
Punkte für Reaktionen
758
Punkte
154
Ich nutze auch nur eine Instanz pro Host. Jede Anwendung hat eigene Zugangsdaten und Beschränkungen.
wie kann ich den Inhalt der Datenbanken mir anzeigen lassen?
Ich nutze bei mir aktuell nur PostgreSQL und habe im selben Stack wie die DB einfach PGAdmin mit installiert. So kann ich auf die DB Zugreifen/Verwalten.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Achja Thema Inhalt:
Ich kann auf die DB zugreifen mit phpmyadmin als Docker Container und auch mit HeidiSQL vom Client aus

Die MySQL DB kannst du übrigens auch in mariadb abbilden. Paperless kann auch MySQL. Entsprechend könntest du bei dir alles in eine DB laufen lassen.
Bei mir läuft auf eine mariadb Instanz:
-vaultwarden
-bookstack
-redmine
-FirefoxSync
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
1.982
Punkte für Reaktionen
577
Punkte
134
Ich halte das genauso wie @plang.pl

Bei mir gehen in eine MariaDB in einem eigenen Stack
Bookstack
FirefoxSync
Nextcloud und
Paperless

Alle mit einem eigenen Benutzer, der nur auf die jeweilige Datenbank Zugriff hat.

Du musst nur dafür sorgen, dass die anderen Container auch einen Fuss im MariaDB-Netz haben, dann können die Container die Datenbanken Docker-intern ansprechen.

Für den externen Zugriff nutze ich das schon von dir erwähnte HeidiSQL.
 

wjavixxassuj

Benutzer
Mitglied seit
19. Sep 2021
Beiträge
101
Punkte für Reaktionen
10
Punkte
68
Ich habe jetzt zwei Stacks erstellt die im Bridge Mode laufen.

1692955878795.png1692955892454.png

in Paperless hatte ich im docker compose die DB Einstellungen auf Standard gelassen.
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: paperless

Das heißt diese Angaben müsste ich jetzt dahin ändern, dass die PostgreSQL Datenbank genutzt wird, die ich soeben erstellt habe richtig?

Dann hätte ich noch eine Frage zu der Userverwaltung.
"Alle mit einem eigenen Benutzer, der nur auf die jeweilige Datenbank Zugriff hat."
Wo erstellt ihr die User? In den Systemeinstellungen in der Synology oder meint ihr den User der im Docker Compose steht womit man sich in PGAdmin oder phpmyadmin einloggt?
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Genau. Die Benutzer müssen in der DB mit einem SQL-Tool erstellt werden oder eben auf der Docker-CLI
 

wjavixxassuj

Benutzer
Mitglied seit
19. Sep 2021
Beiträge
101
Punkte für Reaktionen
10
Punkte
68
Bei mir läuft auf eine mariadb Instanz:
-vaultwarden
hast du eventuell dazu eine docker compose datei? bei mir liegt die db.sqlite3 Datenbank unter .../docker/vaultwarden

Die Benutzer müssen in der DB mit einem SQL-Tool erstellt werden oder eben auf der Docker-CLI
Super, dann habe ich das ja richtig verstanden. Wird dann alles im Passwortmanager dokumentiert.
Kann phpmyadmin auch sqlite Datenbanken darstellen?
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.605
Punkte für Reaktionen
758
Punkte
154
Hier ist ein Beispiel mit Mariadb. Musst nur den Container entfernen und den Connect String unten anpassen.
Da ist auch ein HowTo wie man von SQLite zu Mariadb migriert.
 

wjavixxassuj

Benutzer
Mitglied seit
19. Sep 2021
Beiträge
101
Punkte für Reaktionen
10
Punkte
68
worin liegt den der Unterschied wenn ich den die Datenbank aus dem Dateiverzeichnis ziehe vs. dem Dump mit dem Befehl?
Ich weiß auch garnicht, ob der Befehl so von Synology via SSH (Putty) akzeptiert wird (auch wenn der Unterbau von DSM Linux ist).

Übrigens bekommen ich mit HeidiSQL keine Verbindung zur PostgresDB hin. Mit mariaDB hat es auf anhieb funktioniert.
Hab bei den Bibliotheken libpq-10 - 15 .dll schon durchprobiert.

1692958822278.png
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
28. Okt 2020
Beiträge
14.180
Punkte für Reaktionen
4.915
Punkte
519
Der Unterschied ist, dass bei reöationalen Datenbanken vor einem Dump die Tabelle gelockt wird und deshalb im Gegensatz zum einfachen kopieren der Daten die Konsistenz sichergestellt ist
 

wjavixxassuj

Benutzer
Mitglied seit
19. Sep 2021
Beiträge
101
Punkte für Reaktionen
10
Punkte
68
Ich hab noch folgendes Problem bei der Installation von Postgres und PGAdmin. Über Docker Compose bekomme ich es nicht hin, dass postgres und pgadmin über das Docker Subnetz laufen. Ergo blockt die Firewall die Verbindung zwischen PGAdmin und der Datenbank, sodass ich keine Verbindung aufbauen kann. Wenn ich aber die Subnetz Zuweisung manuell in Portainer ändere, dann funktioniert es.

Firewall Einstellungen:
1692970419560.png

Postgres hat eine anderes IPV4 Layout. Dort sind dann auch PGAdmn und postgres enthalten.
1692970475691.png

Wähle ich das Netzwerk "bridge" manuell aus, dann funktioniert auch die Verbindung. Wenn es bei "postgres_default" steht dann funktioniert es nicht.
1692970567054.png

Die Docker Compose Datei habe ich von Mariushosting und mit meinen Daten leicht angepasst

Diff:
version: "3.9"

services:
  postgres:
    image: postgres:latest
    container_name: postgres
    environment:
      POSTGRES_DB: "pgdb"
      POSTGRES_USER: "pguser"
      POSTGRES_PASSWORD: "password"
    ports:
      - 39429:5432
    volumes:
      - /volume1/docker/postgres:/var/lib/postgresql/data
   
  pg-admin:
    image: dpage/pgadmin4:latest
    container_name: pgadmin
    environment:
      PGADMIN_DEFAULT_EMAIL: "admin@admin.com"
      PGADMIN_DEFAULT_PASSWORD: "password"
      PGADMIN_LISTEN_PORT: 5050
    ports:
      - 22022:5050
    volumes:
      - /volume1/docker/pgadmin:/var/lib/pgadmin:rw

Zusatzfrage:
Es gibt auch die Möglichkeit die Daten im Dockercontainer selbst zu speichern.
Statt "/volume1/docker/postgres:/var/lib/postgresql/data" könnte ich "data:/var/lib/postgresql/data" nutzen.
Wo liegt den hier der Unterschied? Mir wäre jetzt nur bekannt, dass ggf. Daten verloren gehen wenn man den Docker Container neustartet.
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.605
Punkte für Reaktionen
758
Punkte
154
Mein Stack sieht so aus:
Code:
version: '3.5'

volumes:
    pgadmin:

services:
  postgres:
    container_name: postgres_container
    image: postgres:15
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: PW
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
       - /volume1/docker/psql:/var/lib/postgresql/data
    ports:
      - "55432:5432"
    restart: unless-stopped
 
  pgadmin:
    container_name: pgadmin_container
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: pg@admin.de
      PGADMIN_DEFAULT_PASSWORD: PW
      PGADMIN_CONFIG_SERVER_MODE: 'False'
    volumes:
       - pgadmin:/var/lib/pgadmin
    ports:
      - 18300:80
    restart: unless-stopped

Und ich achte nicht drauf welche Container in welchem Netzwerk ist. Ich greife einfach über syno-ip:55432 drauf zu.

Ich hab die Compose von hub.docker.com benutzt. Hab nur adminer durch pgadmin ersetzt, weil ich es besser finde.
 

wjavixxassuj

Benutzer
Mitglied seit
19. Sep 2021
Beiträge
101
Punkte für Reaktionen
10
Punkte
68
Und ich achte nicht drauf welche Container in welchem Netzwerk ist. Ich greife einfach über syno-ip:55432 drauf zu.
Ich auch nicht, nur ist es ein Problem, wenn die Docker Container nicht in dem richtigen IP Bereich laufen. Die Firewall blockt die Kommunikation gnadenlos. Ist eher eine Grundsatzfrage wie ich über den Docker Compose korrigieren kann. Es wird auch bei anderen Containern das Problem auftreten.
 

wjavixxassuj

Benutzer
Mitglied seit
19. Sep 2021
Beiträge
101
Punkte für Reaktionen
10
Punkte
68
Habe ich auch bereits probiert, leider ohne Erfolg.

Code:
networks:
 default:
    name: bridge
    external: true
-> failed to deploy a stack: Container maria_db Creating Container phpmyadmin CreatingError response from daemon: network-scoped alias is supported only for containers in user defined networks.

Code:
networks:
  network1:
    name: bridge
    external: true
-> Deployment funktioniert, aber das Subnetz passt trotzdem nicht.

Code:
version: '3'

networks:
 default:
    name: bridge
    external: true

services:
  mariadb:
    image: mariadb:10.6
    container_name: maria_db
    restart: always
    environment:
      MYSQL_USER: mdb_user
      MYSQL_PASSWORD: "55d&$5q*#4Z^!5tR22&&&63%i"
    expose:
        - "2747"
    ports:
        - "2747:3306"
    volumes:
     - /volume1/docker/mariadb:/var/lib/mysql
    networks:
      - bridge
-> failed to deploy a stack: service "mariadb" refers to undefined network bridge: invalid compose project
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.605
Punkte für Reaktionen
758
Punkte
154
Leg mal ein eigenes Netzwerk an. Die Container im default Bridge Netzwerk können untereinander nicht kommunizieren.
Und ja dann musst du deine Firewall anpassen.
 

wjavixxassuj

Benutzer
Mitglied seit
19. Sep 2021
Beiträge
101
Punkte für Reaktionen
10
Punkte
68
1692973338229.png

Failure
Pool overlaps with other one on this address space

Verstehe nicht ganz was er von mir möchte :)
Nach dem anlegen eines neuen Netzwerks muss ich die Firewall natürlich anpassen.
 

wjavixxassuj

Benutzer
Mitglied seit
19. Sep 2021
Beiträge
101
Punkte für Reaktionen
10
Punkte
68
Nein, es gibt lediglich die hier. Das von oben möchte ich hinzufügen.

1692973542340.png

Wenn ich Subnetz: 173.18.0.0/16 und Gateway 173.18.0.1 einstelle, dann bekomme ich die Fehlermeldung
non parsable secondary ip address (device0:) passed for network docker_private
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat