Indice
Container Alpine Linux in Systemd-nspawn
Autore: Fabio Di Matteo
Ultima revisione: 12/09/2025 11:32
Alpine linux non è basata su systemd dunque il sottosistema di container di systemd (systemd-nspawn) non la supporta del tutto. Di seguito alcune soluzioni al problema. Dovrebbe bastare lanciare systemd-nspawn da riga di comando senza passare per machinectl. In modo tale da “ereditare” diverse caratteristiche del sistema host reale.
Scaricare il miniroot fs che viene preparato dal progetto : Alpine e scompattarlo in una cartella (“./alpine” in questo esempio).
Ecco un esempio. lancio solo l'applicazione che mi serve.
/usr/bin/systemd-nspawn -D ./alpine/ --as-pid2 /bin/sh
Una unit per lanciare il container all'avvio
Uso come entrypoint sul container uno script (/usr/local/bin/start.sh).
/etc/systemd/system/alpine-web.service
[Unit] Description=Run a Alpine web server container Wants=network-online.target After=network-online.target [Service] Type=simple ExecStart=/usr/bin/systemd-nspawn -D /mnt/alpine/ --as-pid2 /usr/local/bin/start.sh ExecStop=/usr/bin/machinectl terminate Alpine-web [Install] WantedBy=multi-user.target
Esempio di entrypoint : start.sh
#!/bin/bash /usr/sbin/sshd -p 3030 & /usr/bin/prosody --nodaemon --log=stdout --loglevel=debug --config /etc/prosody/prosody.cfg.lua
Ricordarsi di generare le chiavi di sshd con ssh-keygen -A .
Lanciare il container con :
systemctl start alpine-web
Lanciare automaticamente il container con :
systemctl enable alpine-web
Per killare il container usare ripetutatamente il comando :
machinectl kill alpine-web
oppure entrare in ssh sul container e digitare “poweroff”
Avviare al boot se il container risiede su disco esterno
Vedere la sezione “Container che risiedono su un disco esterno” : Avviare container systemd-nspawn al boot
