【发布时间】:2021-12-26 17:52:11
【问题描述】:
我想知道是否可以运行 rootless podman 容器并启用 systemd inside 容器(不要与控制容器本身的 systemd 服务混淆在主机系统级别!)?如果是,我需要什么?
这是一个简单的Dockerfile 我一直在尝试以非特权用户身份运行(以root身份运行良好!)
FROM ubuntu:focal
RUN apt-get -qqy update && apt-get -qqy --no-install-recommends install \
init
# Start the systemd Init service by default
CMD ["/sbin/init"]
我注意到在$podman build -t foo:latest . 期间发生了以下情况。顺便说一句,这也发生在 root 用户中,因此可能与问题无关:
...
Setting up systemd (245.4-4ubuntu3.13) ...
Created symlink /etc/systemd/system/getty.target.wants/getty@tty1.service → /lib/systemd/system/getty@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/remote-fs.target → /lib/systemd/system/remote-fs.target.
Created symlink /etc/systemd/system/dbus-org.freedesktop.resolve1.service → /lib/systemd/system/systemd-resolved.service.
Created symlink /etc/systemd/system/multi-user.target.wants/systemd-resolved.service → /lib/systemd/system/systemd-resolved.service.
ln: failed to create symbolic link '/etc/resolv.conf': Device or resource busy
Created symlink /etc/systemd/system/multi-user.target.wants/ondemand.service → /lib/systemd/system/ondemand.service.
Created symlink /etc/systemd/system/sysinit.target.wants/systemd-pstore.service → /lib/systemd/system/systemd-pstore.service.
Initializing machine ID from random generator.
Cannot set file attribute for '/var/log/journal', value=0x00800000, mask=0x00800000, ignoring: Input/output error
...
通过$podman run -d foo:latest 使用该映像运行容器会导致 255 错误,我无法进一步调试。 podman ps 输出:
427b3ce050dc localhost/foo:latest /sbin/init 6 seconds ago Exited (255) 7 seconds ago quirky_poincare
我的 podman 版本是 3.3.1。有人知道这里发生了什么吗?如前所述,以 root 身份在相同的 Dockerfile 下构建和运行相同的容器会导致容器内的 systemd 完美运行!
更新
我通过loginctl enable-linger $user为用户启用lingering:
为一个或多个用户启用/禁用用户逗留。如果为特定用户启用,则会在启动时为该用户生成用户管理器,并在注销后保留。这允许未登录的用户运行长时间运行的服务。将一个或多个用户名或数字 UID 作为参数。如果未指定参数,则为调用者会话的用户启用/禁用逗留。
更多详情请参阅manpage
【问题讨论】:
-
是的,应该可以。您使用的是什么 Podman 版本?你在用什么命令?您是否看到任何错误消息?
-
thx @ErikSjölund 我在原帖中添加了更多信息!