Container esegue systemd, qual è il modo più semplice per eseguire uno script che utilizza systemd?

Nov 14 2020

Ho un contenitore che esegue systemd, le istruzioni di installazione seguite possono essere trovate su

Ora ho uno script install.shche devo eseguire nella fase di compilazione sull'immagine di base creata sopra. Il problema è che install.shè a conoscenza del sistema.

Quindi qual è il modo più semplice per far eseguire l'init di systemd install.sh, quello che voglio è qualcosa di simile

buildah run $ctr -- sh /tmp/install.sh

Ma questo non funzionerà install.shcon systemd, come richiesto.

Risposte

RedaSalih Nov 14 2020 at 06:04

Ero solito costruire la stessa immagine di systemd con buildah e ho provato a eseguire uno script semplice e funziona bene; forse mi manca qualcosa:

 buildah run -t -v /sys/fs/cgroup:/sys/fs/cgroup:ro  onbuild-image-working-container-2  sh -c 'cat /tmp/install.sh'
--> #!/bin/bash
--> echo lol

buildah run -t -v /sys/fs/cgroup:/sys/fs/cgroup:ro  onbuild-image-working-container-2  sh -c 'chmod 777 /tmp/install.sh && /tmp/install.sh'
--> lol

USCITA: lol

DAL tuo ultimo commento: utilizzo qui docker

BUILDAH è destinato per la costruzione di OCI immagini, quindi se si sta utilizzando in parallelo podman o finestra mobile semplicemente usare spingere l'immagine su un registro locale utilizzando buildah dopo la costruzione systemd-immagine da Dockerfile e montare / sys / fs / cgroup su / sys / fs / cgroup con opzioni di sola lettura in modo da non sovrascrivere i cgroup di systemd:

buildah bud --format=docker -f Dockerfile -t onbuild-image <path_to_DockerFile>
docker run -d -p 5000:5000 --restart=always --name registry registry:2
buildah push --tls-verify=false onbuild-image docker://localhost:5000/systemd-centos:latest
docker pull localhost:5000/systemd-centos:latest
ctr1="$(docker run -d -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 8000:80 localhost:5000/systemd-centos)"
docker exec -it $ctr1 'systemctl'