Zugriff auf MariaDB 10 von Nextcloud Docker Container ohne TCP/IP?

kikoo

Benutzer
Mitglied seit
03. Mai 2020
Beiträge
6
Punkte für Reaktionen
0
Punkte
1
Moin moin,

Bin ganz neu in der NAS/Synology Welt und habe mir als Spielzeug eine DS218+ angeschafft.

Nach dieser Anleitung habe ich eine Nextcloud als Docker-Container installiert. Gemäss Anleitung war zunächst die MariaDB auch als Dockercontainer aufgesetzt. Gab dann aber Probleme und ich habe gesehen, dass es Maria auch als DSM Paket gibt. Habe nun dort die DB erstellt und Nextcloud neuinstalliert. Allerdings funktioniert der Zugriff nur wenn ich in der Nextcloud config die IP der Synology eintrage und in den DSM Einstellungen von Maria TCP/IP Zugriff erlaube (siehe Screenshot). Ist es möglich, dem Docker Container Zugriff zu gewähren ohne TCP zu aktivieren? Mit localhost:3307 hatte ich keinen Erfolg.

Screen Shot 2020-05-03 at 11.49.31.png
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
9.029
Punkte für Reaktionen
1.614
Punkte
308
Du schaltest den Zugriff über TCP/IP ab und wunderst dich dann, dass der Zugriff per TCP/IP nicht mehr funktioniert?
 

Andy+

Benutzer
Sehr erfahren
Mitglied seit
25. Jan 2016
Beiträge
5.357
Punkte für Reaktionen
481
Punkte
189
Du musst das so in der config hinterlegen:

'dbhost' => '127.0.0.1:3307',
'dbport' => '',

Die Alternative wäre, den Socket anzugeben

'dbhost' => '127.0.0.1:/run/mysqld/mysqld10.sock`,

ich habe das aber noch nie getestet.
 

kikoo

Benutzer
Mitglied seit
03. Mai 2020
Beiträge
6
Punkte für Reaktionen
0
Punkte
1
Du schaltest den Zugriff über TCP/IP ab und wunderst dich dann, dass der Zugriff per TCP/IP nicht mehr funktioniert?

Meine Überlegung dahinter ist, dass MariaDB sich auch ohne TCP/IP betreiben lässt und da ja die Datenbank sowie die Nextcloud im selben Netzwerk sind ich gerne vermeiden würde unnötige Sicherheitslücken zu öffnen.

@Andy+
Mit 127.0.0.1:3307 hatte ich es auch schon versucht und das, sowie 'dbhost' => '127.0.0.1:/run/mysqld/mysqld10.sock` klappen leider nicht.
 

Andy+

Benutzer
Sehr erfahren
Mitglied seit
25. Jan 2016
Beiträge
5.357
Punkte für Reaktionen
481
Punkte
189
Dann scheint aber ein grundsätzliches Problem vorzuliegen, indem zB. Benutzer oder Passwort nicht passt.

Hast Du mit phpMyAdmin mal geprüft, ob alles angelegt ist, der Benutzer (oc_admin, ggf. auch oc_admin1, oc_admin2, usw.), den es geben sollte, angelegt ist und ob das Passwort auch funktioniert und ob alles mit den Einträgen in der config übereinstimmt?
 

kikoo

Benutzer
Mitglied seit
03. Mai 2020
Beiträge
6
Punkte für Reaktionen
0
Punkte
1
Sobald ich die IP Adresse eingebe, klappt die Verbindung ja. Also mit der Datenbank sollte alles in Ordnung sein.

Ich überlege grade ob es vielleicht daran liegt wie der Docker-Container an das Netzwerk eingebunden ist. Der verwendet eine bridge und vielleicht kann der Nextcloud Docker Container deshalb nur über die IP, nicht aber über localhost auf die Datenbank zugreifen. Aber das ist nur eine vage Vermutung.
 

blurrrr

Benutzer
Sehr erfahren
Mitglied seit
23. Jan 2012
Beiträge
6.204
Punkte für Reaktionen
1.104
Punkte
248
Bridged ist dann aber wie ein eigenes Gerät im Netz, da is dann nix mehr mit localhost, allerdings kenne ich die Docker-Parameter nicht (und habe mich nie damit beschäftigt). Bridged wäre dann auch die denkbar schlechteste Wahl... Wenn Du die Möglichkeit hast und man dort mehrere NICs angeben kann, könntest Du einmal für Deinen regulären Zugriff bridged auswählen (damit das Ding im LAN erreichbar ist) und einmal etwas anderes, womit Du ggf. lokal an die DB vom Hostsystem kommst. Auf der andere Seite... es ist im LAN, es bleibt im LAN... wäre vielleicht doch einfacher via IP :)
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
Ich überlege grade ob es vielleicht daran liegt wie der Docker-Container an das Netzwerk eingebunden ist. Der verwendet eine bridge und vielleicht kann der Nextcloud Docker Container deshalb nur über die IP, nicht aber über localhost auf die Datenbank zugreifen. Aber das ist nur eine vage Vermutung.

Docker legt per default eine Bridge an über die zum lokalen Netzwerk der Diskstation kommuniziert. Die Bridge kann man als virtuellen Hub betrachten und alle angeschlossenen Schnittstellen sehen auch alle Ethernetpakete. Die Bridge heißt standardmäßig "docker0" und besitzt per default die IP-Adresse 172.17.0.1

Dies kann man auf dem System wie folgt verifizieren bzw. nachvollziehen:

Rich (BBCode):
brctl show

bridge name     bridge id             STP enabled       interfaces
docker0         8000.0242141aa0a1     no                docker843113a

und die IP Adresse der Bridge kann man sich wie folgt anzeigen lassen.

Rich (BBCode):
ifconfig docker0

docker0   Link encap:Ethernet HWaddr 02:42:14:1A:A0:A1  
          inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0

Somit bekommt jeder Docker Container eine IP Adresse aus diesem Netzwerk der Bridge. Somit ist es auch nicht möglich die Datenbank per "localhost" zu erreichen.
Deine Vermutung hat sich somit bestätigt :D

--luddi
 

kikoo

Benutzer
Mitglied seit
03. Mai 2020
Beiträge
6
Punkte für Reaktionen
0
Punkte
1
Okay! Danke euch für die Aufklärung :)

Was kann man dann machen um das Teil abzusichern? Einfach in der Firewall nur die IP 172.17.0.1 von Docker zu lassen und dem Rest den Zugriff auf MariaDB sperren? Ist denn diese IP statisch?
 

Andy+

Benutzer
Sehr erfahren
Mitglied seit
25. Jan 2016
Beiträge
5.357
Punkte für Reaktionen
481
Punkte
189
Weshalb möchtest Du sperren?

Dass Nextcloud als Dockerversion im Einsatz ist, habe ich nicht gleich gesehen. Ich kannte das bislang so, dass dann auch eine Dockerversion von MariaDB 10 installiert sein sollte. Aber ich mache noch nicht allzu viel mit Docker, daher lerne ich immer wieder. Dann wäre die Datenbankanbindung

'dbhost' => '172.17.0.1:3307',
'dbport' => '',

oder wie sehe ich das?
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
@kikoo
Eine explizite Firewall Regel für einen Dienst als Ziel kann man nicht definieren. Man kann nur eingehende Verbindungen nach dessen Ursprung filtern, und das Ziel ist immer eines der Netzwerkadapter. Somit kann man z.B. alle Verbindungen die von Docker über den Port 3307 kommen in das Netzwerk der Diskstation (eth0) zulassen.

Aber vorsicht bei der korrekten Konfiguration:
Die Docker Bridge hat die IP Adresse 172.17.0.1, und jeder Container bekommt eine eigenständige IP Adresse z.B. nextcloud 172.17.0.2.

Entweder man macht die IP Adresse des Container ausfindig und verwendet explizit diese in der Firewall als Regel oder man lässt das gesamte Docker Netzwerk zu.

IP Adresse des jeweiligen Containers auslesen:
Rich (BBCode):
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' name_of_container

Das Problem wird sein, dass sich die IP Adressen verändern können wenn man mehrere Container verwendet und diese wieder in unterschiedlichen Reihenfolgen startet.

Als Beispiel für die Firewall Konfiguration:

Option 1 - Alle Verbindungen des Docker Netzwerk über den Port 3307 zulassen.
Rich (BBCode):
Ports: 3307    Protokoll: TCP    Quell-IP: 172.17.0.0/255.255.0.0    Aktion: Zulassen

Option 2 - Explizit den jeweiligen Docker Container mit seiner IP Adresse über den Port 3307 zulassen.
Rich (BBCode):
Ports: 3307    Protokoll: TCP    Quell-IP: 172.17.0.x    Aktion: Zulassen

@Andy+
Wenn die Datenbank MariaDB der Diskstation verwendet werden soll, dann muss der Eintrag weiterhin die IP Adresse der Diskstation haben.

'dbhost' => '<IP-DISKSTATION>:3307',

Wenn man MariaDB als Docker Container verwendet dann müsste man in der Konfig entsprechend die IP Adressse des Datenbank (MariaDB) Containers angeben.
z.B.
'dbhost' => '172.17.0.x:3307',


--luddi
 
Zuletzt bearbeitet:

kikoo

Benutzer
Mitglied seit
03. Mai 2020
Beiträge
6
Punkte für Reaktionen
0
Punkte
1
Hi luddi,

Ja aber das ist doch dann eine Option: Nur das Docker Netzwerk zulassen. Das sollte ja schon ziemlich sicher sein. Auf jeden Fall besser, als direkt von der IP des NAS erreichbar.

172.17.0.0/255.255.0.0 - Welche IPs lässt das denn dann zu?
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174

Biernot78

Benutzer
Mitglied seit
26. Okt 2018
Beiträge
50
Punkte für Reaktionen
3
Punkte
8
Hallo zusammen,
ich habe mir auch nach dieser Anleitung vom ersten Post Nextcloud und MariaDB jeweils in einem Docker installiert. Nur bei der letzten einrichtung von nextcloud kommt dann dieser Fehler:

Error while trying to create admin user: Failed to connect to the database: An exception occurred in driver: SQLSTATE[HY000] [2002] Connection timed out

Stelle ich um auf SQLite dann funktioniert alles.

Bin genau nach dieser Anleitung vorgegangen.
 


 

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