容器运行 systemd,执行使用 systemd 的脚本的最简单方法是什么?

容器运行 systemd,执行使用 systemd 的脚本的最简单方法是什么?

我有一个运行 systemd 的容器,可以在以下位置找到以下设置说明

现在我有一个脚本install.sh,需要在构建阶段在上面创建的基础映像上运行。问题在于它install.sh是 systemd 感知的。

那么让 systemd 的 init 运行的最简单方法是什么install.sh,我想要的是这样的

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

但这会不是根据我的要求,在 systemd 下运行install.sh

答案1

我曾经使用 buildah 构建相同的 systemd 映像,并尝试执行一个简单的脚本,它工作正常;也许我错过了一些东西:

 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

输出:哈哈

自从您上次发表评论以来:在这里使用 docker

比达是为了建造OCI图像,所以如果你并行使用播客或者泊坞窗只需使用将图像推送到本地注册表使用建造者建造后系统映像从 Dockerfile 并将 /sys/fs/cgroup 挂载到 /sys/fs/cgroup 上只读选项,这样它就不会覆盖您的 systemd cgroups :

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'

相关内容