Anterior: Um banco de dados de contêineres, Acima: Contêineres do Sistema Guix [Conteúdo][Índice]
De que adianta um Sistema Guix rodando um serviço de banco de dados PostgreSQL como um contêiner quando só podemos falar com ele com processos originados no contêiner? Seria muito melhor se pudéssemos falar com o banco de dados pela rede.
A maneira mais fácil de fazer isso é criar um par de dispositivos Ethernet
virtuais conectados (conhecidos como veth
). Movemos um dos
dispositivos (ceth-test
) para o namespace net
do contêiner e
deixamos a outra extremidade (veth-test
) da conexão no sistema host.
pid=5983 ns="guix-test" host="veth-test" client="ceth-test" # Anexe o novo namespace de rede "guix-test" ao PID do contêiner. sudo ip netns attach $ns $pid # Crie o par de dispositivos sudo ip link add $host type veth peer name $client # Mova o dispositivo cliente para o namespace de rede do contêiner sudo ip link set $client netns $ns
Em seguida, configuramos o lado do host:
sudo ip link set $host up sudo ip addr add 10.0.0.1/24 dev $host
…e então configuramos o lado do cliente:
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
Neste ponto, o host pode alcançar o contêiner no endereço IP 10.0.0.2, e o contêiner pode alcançar o host no IP 10.0.0.1. Isso é tudo o que precisamos para falar com o servidor de banco de dados dentro do contêiner do sistema host do lado de fora.
$ 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)
Agora que terminamos esta pequena demonstração, vamos limpar:
sudo kill $pid sudo ip netns del $ns sudo ip link del $host
Anterior: Um banco de dados de contêineres, Acima: Contêineres do Sistema Guix [Conteúdo][Índice]