14.7. 使用 systemd 自动启动 pod
				您可以将多个容器作为 systemd 服务启动。请注意,system ctl 命令应该只用于 pod,不应通过 systemctl 单独启动或停止容器,因为它们由 pod 服务与内部 infra-container 一起管理。
			
					从 Podman v4.6 开始,您可以使用描述如何以类似于常规 systemd 单元文件的格式运行容器的 Quadlets ,并隐藏了在 systemd 下运行容器的复杂性。
				
先决条件
- 
						container-tools元数据包已安装。
流程
- 创建一个空 pod,如 - systemd-pod:- podman pod create --name systemd-pod - $ podman pod create --name systemd-pod 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 可选:列出所有 pod: - podman pod ps - $ podman pod ps POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID 11d4646ba41b systemd-pod Created 40 seconds ago 1 8a428b257111 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在空 pod 中创建两个容器。例如,要在 - systemd-pod中创建- container0和- container1:- podman create --pod systemd-pod --name container0 registry.access.redhat.com/ubi9 top podman create --pod systemd-pod --name container1 registry.access.redhat.com/ubi9 top - $ podman create --pod systemd-pod --name container0 registry.access.redhat.com/ubi9 top $ podman create --pod systemd-pod --name container1 registry.access.redhat.com/ubi9 top- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 可选:列出与其关联的所有 pod 和容器: - podman ps -a --pod - $ podman ps -a --pod CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME 24666f47d9b2 registry.access.redhat.com/ubi9:latest top 3 minutes ago Created container0 3130f724e229 systemd-pod 56eb1bf0cdfe k8s.gcr.io/pause:3.2 4 minutes ago Created 3130f724e229-infra 3130f724e229 systemd-pod 62118d170e43 registry.access.redhat.com/ubi9:latest top 3 seconds ago Created container1 3130f724e229 systemd-pod- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 为新的 pod 生成 - systemd单元文件:- podman generate systemd --files --name systemd-pod - $ podman generate systemd --files --name systemd-pod /home/user1/pod-systemd-pod.service /home/user1/container-container0.service /home/user1/container-container1.service- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 请注意,生成了三个 - systemd单元文件,一个用于- systemd-podpod,两个用于容器- container0和- container1。
- 显示 - pod-systemd-pod.service单元文件:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 
								[Unit]部分中的Requires行定义container-container0.service和container-container1.service单元文件的依赖项。两个单元文件都会被激活。
- 
								[Service]部分中的ExecStart和ExecStop行分别启动和停止 infra-container。
 
- 
								
- 显示 - container-container0.service单元文件:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 
								[Unit]部分中的BindsTo行定义pod-systemd-pod.service单元文件的依赖项
- 
								[Service]部分中的ExecStart和ExecStop行分别启动和停止container0。
 
- 
								
- 显示 - container-container1.service单元文件:- cat container-container1.service - $ cat container-container1.service- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 将所有生成的文件复制到 - $HOME/.config/systemd/user中,以便以非 root 用户身份安装:- cp pod-systemd-pod.service container-container0.service container-container1.service $HOME/.config/systemd/user - $ cp pod-systemd-pod.service container-container0.service container-container1.service $HOME/.config/systemd/user- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 启用该服务并在用户登录时启动: - systemctl enable --user pod-systemd-pod.service - $ systemctl enable --user pod-systemd-pod.service Created symlink /home/user1/.config/systemd/user/multi-user.target.wants/pod-systemd-pod.service- /home/user1/.config/systemd/user/pod-systemd-pod.service. Created symlink /home/user1/.config/systemd/user/default.target.wants/pod-systemd-pod.service - /home/user1/.config/systemd/user/pod-systemd-pod.service. - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 请注意,服务会在用户注销时停止。 
验证
- 检查是否启用该服务: - systemctl is-enabled pod-systemd-pod.service - $ systemctl is-enabled pod-systemd-pod.service enabled- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow