NixOS Containers: Difference between revisions
| Line 140: | Line 140: | ||
=== Define and create nixos-container from a Flake file === | === Define and create nixos-container from a Flake file === | ||
We can define and create a custom container called <code>container</code> from a file stored as <code>flake.nix</code>. In this case we use the unstable branch of the nixpkgs repository as a source. | We can define and create a custom container called <code>container</code> from a file stored as <code>flake.nix</code>. In this case we use the unstable branch of the nixpkgs repository as a source. | ||
| Line 176: | Line 175: | ||
=== Use agenix secrets in container === | === Use agenix secrets in container === | ||
To add <code>agenix</code> secrets to a container bind mount the <code>ssh-host.key</code> and import the <code>agenix.nixosModule</code> and set <code>age.identityPaths</code> [https://discourse.nixos.org/t/secrets-inside-nixos-containers/34403/6 Source] | To add <code>agenix</code> secrets to a container bind mount the <code>ssh-host.key</code> and import the <code>agenix.nixosModule</code> and set <code>age.identityPaths</code> [https://discourse.nixos.org/t/secrets-inside-nixos-containers/34403/6 Source] | ||
| Line 218: | Line 216: | ||
They should be connected with a bridge <code>br0</code> and both should have internet address. | They should be connected with a bridge <code>br0</code> and both should have internet address. | ||
Assuming Network Manager is used, so the introduction of systemd.network should not interfere with the rest of the setup. | Assuming Network Manager is used, so the introduction of <code>systemd.network</code> should not interfere with the rest of the setup. | ||
'''Configuration:''' | '''Configuration:''' | ||
| Line 349: | Line 347: | ||
};|name=/etc/nixos/configuration.nix|lang=nix}} | };|name=/etc/nixos/configuration.nix|lang=nix}} | ||
You can test the connection by loggining into containerA and pinging containerB, curling to | You can test the connection between <code>containerA</code> and <code>containerB</code> by loggining into <code>containerA</code> and pinging <code>containerB</code>, curling to <code>containerB</code>'s httpd server or pinging an internet website: | ||
<syntaxhighlight lang="console"> | <syntaxhighlight lang="console"> | ||
# nixos-container root-login containerA | # nixos-container root-login containerA | ||
[root@containerA:~]# ping 192.168.100.3 -c3 # | [root@containerA:~]# ping 192.168.100.3 -c3 # Ping containerB | ||
[root@containerA:~]# curl http://192.168.100.3:80 # | [root@containerA:~]# curl http://192.168.100.3:80 # Curl to containerB's httpd server | ||
[root@containerA:~]# ping nixos.org -c3 # | [root@containerA:~]# ping nixos.org -c3 # Ping an internet website | ||
</syntaxhighlight> | </syntaxhighlight> | ||
You can test the connection between the host machine and <code>containerA</code> or <code>containerB</code> by pinging <code>containerA</code>, pinging <code>containerB</code> and curling to <code>containerB</code>'s httpd server: | |||
<syntaxhighlight lang="console"> | |||
$ ping 192.168.100.2 -c3 # Ping containerA | |||
$ ping 192.168.100.3 -c3 # Ping containerB | |||
$ curl http://192.168.100.3:80 # Curl to containerB's httpd server | |||
</syntaxhighlight> | |||
Note that with the command <code>ip address</code>, even if the interfaces of the containers are displayed (<code>vb-containerA</code> and <code>vb-containerB</code>), they only have a MAC address assigned, they do not have a separate ip address displayed. For extra configuring, maybe use the option <code>containers.<name>.extraVeths</code>. | |||
Made with help of the <code>systemd.network</code> wiki page<ref>[[Systemd/networkd]]</ref> and this discourse post<ref>https://discourse.nixos.org/t/how-to-connect-two-or-more-nixos-containers-together-their-internet-ports/77674/9?u=blastboomstrice</ref>. | |||
== Troubleshooting == | == Troubleshooting == | ||