跳到主要内容

podman system service - 运行API服务

摘要

podman system service - API 是 Podman 提供的一个服务,它允许开发者通过 API 接口来与 Podman 进行交互。通过这个 API,开发者可以执行各种容器操作,如创建、运行、管理容器,以及进行镜像的拉取、推送等。

下面为开发者介绍 podman system service - API 的一些关键点和特性:

功能与用途

  1. 容器管理:通过 API,你可以创建、启动、停止、删除容器,以及查看容器的状态、日志等信息。
  2. 镜像管理:你可以使用 API 来拉取和推送容器镜像,管理本地镜像仓库中的镜像。
  3. 网络管理:创建、删除和配置 Podman 的网络,以满足不同容器间的通信需求。
  4. 卷管理:管理容器的持久化存储,如创建、删除和挂载卷。
  5. 事件监听:订阅容器事件,以便在容器状态发生变化时接收通知。

安全性考虑

安全性是使用 API 时必须考虑的重要因素。以下是一些建议:

  • 访问控制:确保只有授权的用户或应用程序能够访问 API。可以通过身份验证和授权机制来实现这一点。
  • 网络隔离:尽量避免将 API 暴露给外部网络。如果必须这样做,请确保使用安全的传输协议(如 HTTPS),并配置适当的防火墙规则。
  • 输入验证:对 API 的输入进行严格的验证和过滤,以防止潜在的注入攻击。

使用方式

  1. 启动 API 服务:你可以使用 podman system service 命令来启动 Podman 的 API 服务。根据需要配置选项,如超时时间、CORS 头部等。
  2. 编写客户端代码:使用你熟悉的编程语言或框架,编写与 Podman API 进行交互的客户端代码。你可以使用 HTTP 请求库来发送请求并处理响应。
  3. 处理响应:解析 API 返回的响应数据,根据需要进行进一步的处理或展示。

文档与资源

为了更深入地了解 podman system service - API 的详细用法和功能,建议查阅 Podman 的官方文档和相关资源。这些文档通常会提供 API 的端点、请求参数、响应格式等详细信息,以及示例代码和最佳实践。

注意事项

  • 版本兼容性:确保你的 Podman 版本与所使用的 API 版本兼容。不同版本的 Podman 可能具有不同的 API 特性和行为。
  • 错误处理:在编写客户端代码时,务必处理可能出现的错误情况,如网络问题、认证失败、资源不存在等。
  • 性能优化:对于大量或频繁的 API 请求,考虑使用批量操作、缓存机制或异步处理等方式来优化性能。

总之,podman system service - API 为开发者提供了一种强大而灵活的方式来与 Podman 进行交互和管理容器。通过合理使用这个 API,你可以构建出功能丰富、性能优良的容器化应用程序。

podman system service [选项]

描述

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

podman system service 提供的REST API分为两部分:一个支持Docker v1.40 API的兼容层,和一个Podman原生的Libpod层。 后者的文档可以在api** 上找到。 虽然两个API都是版本化的,但服务器不会拒绝设置了不支持版本的请求。

在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

安全性和权限

使用podman system service时,安全性和权限管理至关重要。以下是关于安全性和权限的一些关键注意事项:

  1. 访问控制:确保只有受信任的用户或系统组件能够访问API服务。使用防火墙规则、Unix套接字权限或其他适当的访问控制机制来限制对服务的访问。

  2. 身份验证和授权:如果API服务需要身份验证,请确保使用强密码或密钥,并考虑使用现代的身份验证和授权机制,如OAuth或OpenID Connect。

  3. 权限最小化:以最小的必要权限运行Podman服务。避免以root用户身份运行不必要的服务,以减少潜在的安全风险。

  4. 更新和修补:定期更新Podman及其依赖项,以获取最新的安全修复和改进。保持系统和软件的最新状态是维护安全性的重要步骤。

  5. 审计和监控:启用日志记录并监控API服务的活动。这有助于检测和响应潜在的安全事件或异常行为。

  6. 使用SELinux或AppArmor:如果系统支持SELinux或AppArmor,考虑使用这些安全模块来进一步限制Podman服务的权限和访问。

  7. 最佳实践:遵循Podman和相关技术的最佳实践,以确保安全配置和使用。这包括避免已知的安全漏洞、使用安全的配置选项和遵循官方文档中的建议。

请注意,安全性是一个复杂的领域,每个环境都有其独特的需求和挑战。因此,在部署和使用podman system service时,请务必仔细评估你的安全需求,并采取相应的安全措施来保护你的系统和数据。

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

除了 systemd 用户服务之外,还存在一个 systemd 系统服务 podman.service。它运行具有 root 权限的 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 服务,该命令还接受一个可选的端点参数,该参数以 URI 形式指定 API。例如,unix:///tmp/foobar.socktcp://localhost:8080。 如果没有提供端点,将使用默认值。具有 root 权限的服务的默认端点是 unix:///run/podman/podman.sock,而无 root 权限的服务的默认端点是 unix://$XDG_RUNTIME_DIR/podman/podman.sock(例如 unix:///run/user/1000/podman/podman.sock)。

从容器内部访问 Unix 套接字

要在容器内部访问 API 服务,请执行以下操作: -将套接字挂载为卷 -使用 --security-opt label=disable 运行容器

安全性

请注意,API 授予对所有 Podman 功能的完全访问权限,因此允许以运行 API 的用户的身份执行任意代码,且无法限制或审计这种访问。API 的安全模型建立在通过 Unix 套接字进行访问的基础上,通过标准文件权限限制访问,确保只有运行服务的用户才能访问它。

我们强烈建议不要通过网络(例如,将服务绑定到 tcp URL)提供 API 套接字。即使是通过本地主机进行访问也存在风险——任何能够访问系统的用户都将能够访问 API。

如果需要远程访问,我们建议通过 SSH 转发 API 套接字,并在远程机器上尽可能限制访问。

如果必须使用 tcp URL,建议使用 --cors 选项以提高安全性。

选项

--cors

注入到 HTTP 响应中的 CORS 标头。默认值为空字符串,表示禁用 CORS 标头。

--help, -h

打印使用说明。

--time, -t

会话在 后过期的时间。默认值为 5 秒。值为 0 表示没有超时,因此会话不会过期。

可以通过 containers.conf 中的 service_timeout=VALUE 字段更改默认超时时间。有关更多信息,请参阅 containers.conf(5)

示例

启动用户 systemd 套接字以用于无 root 权限的服务。

systemctl --user start podman.socket

配置 DOCKER_HOST 环境变量以指向 Podman 套接字,以便可以通过 Docker API 工具(如 docker-compose)使用它。

export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock
docker-compose up

配置 systemd 套接字以便在重启后自动启动,并以指定的用户身份运行。

systemctl --user enable podman.socket
loginctl enable-linger <USER>

启动具有 root 权限的服务的 systemd 套接字。

sudo systemctl start podman.socket

配置套接字以便在重启后自动启动。

sudo systemctl enable podman.socket

也可以在不使用 systemd 套接字激活的情况下运行 API。在这种情况下,API 不会在需要时可用,因为命令将在不活动超时时间过去后终止。运行一个不使用套接字激活的 API,不活动超时时间为 5 秒。

podman system service --time 5

由于没有提供 URI 参数,因此使用了默认的套接字。

另请参阅

podman(1), podman-system-connection(1), containers.conf(5)

历史

2020 年 1 月,最初由 Brent Baude <bbaude@redhat.com> 整理 2020 年 11 月,由 Jhon Honce (jhonce at redhat dot com) 更新