Skip to content

Latest commit

 

History

History
60 lines (49 loc) · 1.86 KB

README.md

File metadata and controls

60 lines (49 loc) · 1.86 KB

When systemd-nspawn create a container, it will not configure the host and container's network unless both are managed by systemd-networkd.

So you may often have to manually configure net configuration at both sides.

This script just take one parameter as container name, then

  • configure ip 10.8.8.x for both sides
  • configure iptables at host side to allow the container can access whatever the host can access.
  • print the result ip of the container

Usage:

Host side:

$ wget https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1907.qcow2c -o centos76.qcow2c
$ qemu-img convert -O raw centos76.qcow2c centos76.dd
$ sudo systemd-nspawn --image centos76.dd bash -c '(echo root; echo root) | passwd'
$ sudo systemd-nspawn --image centos76.dd touch /etc/cloud/cloud-init.disabled
$ sudo systemd-nspawn --image centos76.dd --network-veth --boot
Press ^] three times within 1s to kill container.
...
[  OK  ] Started Postfix Mail Transport Agent.
[  OK  ] Started Dynamic System Tuning Daemon.
[  OK  ] Reached target Multi-User System.
         Starting Update UTMP about System Runlevel Changes...
[  OK  ] Started Update UTMP about System Runlevel Changes.

CentOS Linux 7 (Core)
Kernel 4.4.0-137-generic on an x86_64

localhost login: root
Password:

then you will find it the container has no ip.

[root@localhost ~]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128
host0@if54       DOWN

then you can run this utility (on host side, not the container side): note: no need to be able to access the centos76.dd file, centos76.dd is just choosen by systemd-nspawn as a name.

$ ./systemd-nspawn-ip centos76.dd

the output will be

10.8.8.2

then you can

ssh 10.8.8.2

Of course you need enter the container to prepare ssh user and keys or sshd_config.

furthermore, you can access any ip that can be accessed from the host.