ubuntuusers.de

Für diese Funktion musst du eingeloggt sein.

Zugriff für user aus Docker Container gewähren

Status: Ungelöst | Ubuntu-Version: Kubuntu 20.04 (Focal Fossa)
Antworten |

Transmitter

Anmeldungsdatum:
18. Mai 2008

Beiträge: 538

Hallo,

ich habe eine MariaDB installiert und will versuchen, den Zugriff einzuschränken.

Aus einem Docker Container (in einer NodeJS app) greife ich auf die DB zu und das funktioniert, wenn ich dem SQL user als Hostname: % mitgebe. Würde den Zugriff gern einschränken, sodass nur der Zugriff aus der NodeJS app erlaubt ist für diesen User.

Meine IPs sehen so in der Art aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether ipV6
    inet 5.10.152.18/24 brd 5.10.152.255 scope global eth0
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether ipV6
    inet 122.17.0.1/16 brd 122.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
8: br-8251a9302510: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether ipV6
    inet 122.18.0.1/16 brd 122.18.255.255 scope global br-8251a9310
       valid_lft forever preferred_lft forever
22: vethbbadbfc@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-8251a9310 state UP group default 
    link/ether ipV6 link-netnsid 0
24: veth4eba1c8@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-8251a9310 state UP group default 
    link/ether ipV6 link-netnsid 1

Wenn ich das richtig verstehe, hat mein Docker Container eine IP nach dem 'mounten'. Und ich dachte, dass ich jetzt so einen user anlegen kann in der DB: 'user'@'122.17.0.1' bekomme so aber keinen Zugriff auf die DB. Hat meine NodeJS app eine andere IP oder woran liegt das?

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

Das geht nur, wenn du den Docker-Container im Host-Network startest. Dann läuft das alles auf 127.0.0.1, so wie wenn du das nativ installieren würdest. Der Nachteil ist halt, dass du jeweils nur einen Container auf einem Port starten kannst. In der Regel macht man das nicht - oder nur bei Services, die nicht NAT-fähig sind.

Wenn du nicht im Host-Network bist, nutzt die Containertechnologie (Docker und Konsorten) für die Kommunikation zwischen den Containern (und zwischen Container und Host) NAT (https://de.wikipedia.org/wiki/Netzwerkadress%C3%BCbersetzung). Da klappt das mit der Freigabe via IP nicht. Stattdessen musst du eben ein längeres Passwort wählen 😉

Hat meine NodeJS app eine andere IP oder woran liegt das?

Wechsel mal mit docker exec in den Container und tippe ip a, dann hast du die aktuelle IP des Containers. Die wird aber von Docker dynamisch übergeben, kann sich also beim nächsten Container-Start wieder ändern. Es ist also keine Lösung, die als Hostname mitzugeben.

Ps: Ich würde MariaDB auch im Container verwenden. Dann kannst du bspw. den in deinem NodeJS-Container den mariadb-Container über seinen Namen (DNS) ansprechen.

Gruß BillMaier

Transmitter

(Themenstarter)

Anmeldungsdatum:
18. Mai 2008

Beiträge: 538

Wie sieht es denn mit dem restlichen Servern aus, wenn Maria im Container wohnt? Kann ich dann mit phpMyAdmin da drauf und auch problemlos von WordPress und Co (also NGINX in diesem Fall)?

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

In der Container-Denke gehört das alles in einen separaten Container und die Container kommunizieren miteinander. Das ist natürlich nicht Pflicht, aber wenn man das mal raus hat und konsequent lebt, dann kommt erst richtig Schwung in die Bude 😉

Hier ein Beispiel, wie sowas aussehen kann:

https://docs.docker.com/samples/wordpress/

Viele Grüße

BillMaier

Antworten |