Précédent: Un conteneur de base de données, Monter: Conteneurs pour le système Guix [Table des matières][Index]
Que vaut un système Guix dans lequel tourne un service de bases de données PostgreSQL dans un conteneur si nous ne pouvons lui parler qu’avec des processus originaire de ce conteneur ? Il serait bien mieux de pouvoir parler à la base de données via le réseau.
La manière la plus simple de faire cela est de créer une paire de
périphérique Ethernet virtuels (connus sous le nom de veth
). Nous
déplaçons l’un des périphériques (ceth-test
) dans l’espace de nom
net
du conteneur et laissons l’autre côté (veth-test
) de la
connexion sur le système hôte.
pid=5983 ns="guix-test" host="veth-test" client="ceth-test" # Attache le nouvel espace de nom réseau « guix-test » au PID du conteneur. sudo ip netns attach $ns $pid # Crée une paire de périphériques sudo ip link add $host type veth peer name $client # Déplace le périphérique client dans l'espace de nom réseau du conteneur sudo ip link set $client netns $ns
Puis nous configurons le côté de l’hôte :
sudo ip link set $host up sudo ip addr add 10.0.0.1/24 dev $host
…puis nous configurons le côté client :
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
Maintenant l’hôte peut atteindre le conteneur à l’adresse IP 10.0.0.2 et le conteneur peut atteindre l’hôte à l’adresse IP 10.0.0.1. C’est tout ce dont nous avons besoin pour communiquer avec le serveur de bases de données dans le conteneur à partir du système hôte, à l’extérieur.
$ psql -h 10.0.0.2 -U test psql (14.4) Type "help" for help. test=> CREATE TABLE hello (who TEXT NOT NULL); CREATE TABLE test=> INSERT INTO hello (who) VALUES ('world'); INSERT 0 1 test=> SELECT * FROM hello; who ------- world (1 row)
Maintenant que nous avons fini cette petite démonstration, nettoyons tout ça :
sudo kill $pid sudo ip netns del $ns sudo ip link del $host
Précédent: Un conteneur de base de données, Monter: Conteneurs pour le système Guix [Table des matières][Index]