Vorige: , Nach oben: Container mit Guix System   [Inhalt][Index]


4.2.2 Netzwerkverbindungen im Container

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]