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服务的访问。