跳到主要内容

Podman实用程序的一些有用教程链接

podman-system-service - 运行API服务

SYNOPSIS

podman system service [选项]

DESCRIPTION

podman system service命令创建了一个监听服务,该服务响应Podman的API调用。该命令在Linux系统上可用,通常通过systemd服务执行。当Podman命令直接在Windows或macOS主机上执行,或者在其他访问远程Podman API服务的情况下,该命令不可用。

podman system service提供的REST API分为两部分:一个兼容层,支持Docker v1.40 API,以及一个Podman原生的Libpod层。

在systemd服务中运行命令

podman system service命令支持systemd套接字激活。当命令在systemd服务中运行时,API服务可以按需提供。如果systemd服务尚未运行,客户端连接到监听套接字时,它将立即被激活。随后,systemd执行podman system service命令。经过一段时间的不活动后(由--time选项定义),命令终止。systemd将podman.service状态设置为不活动。此时,没有运行podman system service进程,不会浪费不必要的计算资源。一旦另一个客户端连接,systemd将再次激活systemd服务。

声明Podman API服务的systemd单元文件是:

/usr/lib/systemd/user/podman.service

/usr/lib/systemd/user/podman.socket

在podman.socket文件中,监听Unix套接字的路径由以下定义:

ListenStream=%t/podman/podman.sock

这表示Unix套接字将监听在/run/user/$(id -u)/podman/podman.sock路径上,其中$(id -u)会被替换为当前用户的用户ID。这提供了一种用户特定的方式,使得每个用户都可以运行自己的Podman API服务,而不会干扰其他用户。

路径中包含systemd的占位符%t,systemd会将其扩展为环境变量XDG_RUNTIME_DIR的值(请参见systemd.unit(5)手册页中的systemd占位符)。

除了systemd用户服务外,还有一个systemd系统服务podman.service。它运行具有完全权限的Podman,并通过Unix套接字/run/podman/podman.sock进行访问。请查看以下systemd单元文件:

/usr/lib/systemd/system/podman.service

/usr/lib/systemd/system/podman.socket

podman system service命令不支持API服务使用多个监听套接字。

注意:默认的systemd单元文件(系统和用户)将日志级别选项从error更改为info。这一更改提供了有关每个API调用的额外信息。

直接运行命令

为了支持在不使用systemd服务的情况下运行API服务,该命令还接受一个可选的endpoint参数,用于以URI形式指定API。例如,unix:///tmp/foobar.sock或tcp://localhost:8080。如果没有提供endpoint,则使用默认值。具有完全权限的服务的默认endpoint是unix:///run/podman/podman.sock,而无权限服务的默认endpoint是unix://$XDG_RUNTIME_DIR/podman/podman.sock(例如unix:///run/user/1000/podman/podman.sock)。

从容器内部访问Unix套接字

要在容器内部访问API服务:

将套接字挂载为卷

使用--security-opt label=disable选项运行容器

安全性

安全性是使用Podman时需要重点考虑的因素。当运行Podman系统服务时,应确保正确配置和管理权限,以防止潜在的安全风险。建议限制对API服务的访问,只允许受信任的用户或系统组件进行通信。此外,定期更新和修补Podman及其依赖项也是保持系统安全性的重要步骤。在使用Podman时,还应注意遵循最佳实践,例如避免以root用户身份运行不必要的服务,以及使用强密码和身份验证机制来保护对API服务的访问。