Vorige: Ein Datenbank-Container, Nach oben: Container mit Guix System [Inhalt][Index]
Was nützt ein Guix System mit laufendem PostgreSQL-Datenbankdienst in einem Container, wenn es nur mit Prozessen reden kann, die ihren Ursprung in dem Container haben? Viel besser wäre es doch, könnten wir die Datenbank über das Netzwerk ansprechen.
Am einfachsten geht das mit einem Paar verbundener virtueller
Ethernet-Geräte (bekannt als veth
). Wir schieben das eine Gerät
(ceth-test
) in den net
-Namensraum des Containers und lassen
das andere Ende (veth-test
) der Verbindung auf dem Wirtssystem.
pid=5983 ns="guix-test" host="veth-test" client="ceth-test" # Anbringen des neuen net-Namensraums "guix-test" an der PID des Containers. sudo ip netns attach $ns $pid # Das Geräte-Paar erzeugen. sudo ip link add $host type veth peer name $client # Das Client-Gerät in den net-Namensraum des Containers verschieben. sudo ip link set $client netns $ns
Anschließend konfigurieren wir die Wirtsseite:
sudo ip link set $host up sudo ip addr add 10.0.0.1/24 dev $host
… und dann konfigurieren wir die Clientseite:
sudo ip netns exec $ns ip link set lo up sudo ip netns exec $ns ip link set $client up sudo ip netns exec $ns ip addr add 10.0.0.2/24 dev $client
Zu diesem Zeitpunkt kann der Wirt den Container unter der IP-Adresse 10.0.0.2 erreichen und der Container kann seinerseits den Wirt auf IP-Adresse 10.0.0.1 erreichen. Das war alles, um mit dem Datenbankdienst, der im Container steckt, vom außen liegenden Wirtssystem aus reden zu können.
$ psql -h 10.0.0.2 -U test psql (14.4) Type "help" for help. test=> CREATE TABLE hallo (wen TEXT NOT NULL); CREATE TABLE test=> INSERT INTO hallo (wen) VALUES ('Welt'); INSERT 0 1 test=> SELECT * FROM hallo; wen ------- Welt (1 row)
Jetzt, wo wir mit der kurzen Demonstration fertig sind, geht es an’s Aufräumen:
sudo kill $pid sudo ip netns del $ns sudo ip link del $host
Vorige: Ein Datenbank-Container, Nach oben: Container mit Guix System [Inhalt][Index]