1.8. 对 rootless 容器的特别考虑
以非 root 用户身份运行容器时,需要考虑以下事项:
-
对于 root 用户(
/var/lib/containers/storage
)和非 root 用户($HOME/.local/share/containers/storage
),主机容器存储的路径是不同的。 - 运行无根容器的用户被授予在主机系统上作为用户和组群 ID 运行的特殊权限。但是,它们对主机上的操作系统没有 root 特权。
-
如果您手动更改
/etc/subuid
或/etc/subgid
,则必须运行podman system migrate
命令,以允许应用新的更改。 -
如果您需要配置 rootless 容器环境,请在主目录(
$HOME/.config/containers
)中创建配置文件。配置文件包括storage.conf
(用于配置存储)和containers.conf
(用于各种容器设置)。您还可以创建registry.conf
文件,以标识使用 Podman 进行拉取、搜索或运行镜像时可用的容器注册表。
有些系统功能在没有 root 特权的情况下无法更改。例如,您无法通过在容器内设置
SYS_TIME
功能并运行网络时间服务(ntpd
)来更改系统时钟。您必须以 root 用户身份运行该容器,绕过 rootless 容器环境,并使用 root 用户的环境。例如:# podman run -d --cap-add SYS_TIME ntpd
请注意,这个示例允许
ntpd
为整个系统调整时间,而不只是在容器内调整。rootless 容器无法访问端口号小于 1024 的端口。在 rootless 容器命名空间中,它可以启动一个服务,该服务从容器中公开 httpd 服务的端口 80 ,但它不能在命名空间外访问:
$ podman run -d httpd
但是,容器需要 root 权限,使用 root 用户的容器环境向主机系统公开该端口:
# podman run -d -p 80:80 httpd
工作站的管理员可以允许用户在编号低于 1024 的端口上公开服务,但他们应了解安全隐患。例如,普通用户可以在官方端口 80 上运行 Web 服务器,并让外部用户认为它是由管理员配置的。在工作站上进行测试是可以接受的,但在网络可访问的开发服务器上可能不是一个好主意,绝对不应该在生产服务器上这样做。要允许用户将端口绑定到 80 以下的端口,请运行以下命令:
# echo 80 > /proc/sys/net/ipv4/ip_unprivileged_port_start
其他资源