Strumenti Utente

Strumenti Sito


sistema:systemd-nspawn:alpine_linux

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

sistema/systemd-nspawn/alpine_linux.txt · Ultima modifica: 12/09/2025 12:45 da Fabio Di Matteo