使用 systemd 要求并启动 podman 网络接口

     2023-03-17     148

关键词:

【中文标题】使用 systemd 要求并启动 podman 网络接口【英文标题】:Require and start podman network interface using systemd 【发布时间】:2020-10-03 20:09:54 【问题描述】:

我有一个由 systemd 管理的主机服务,它侦听 Podman 默认网络接口 (cni-podman0),以便容器可以与之通信。

我遇到的问题是 Podman 仅在第一个容器启动时创建网络接口。这意味着当容器所依赖的主机服务启动时,网络接口没有启动,服务无法监听它。

所以依赖链是: Podman 容器 -needs> 主机服务 -needs> CNI 网络接口

但目前我所知道的启动界面的唯一原因是启动容器。

如何让 systemd 告诉 Podman / CNI 启动默认的桥接网络接口,以便我可以在主机服务单元中依赖它?

是否有明确调出界面的命令,我可以放在一个单元文件中吗?

【问题讨论】:

【参考方案1】:

除非我误解了问题,否则可以在 systemd 服务文件中使用 AfterWants 参数。

打开您的服务文件,例如vim /etc/systemd/system/my_custom_daemon.service 并确保您拥有以下信息:

[Unit]
After=network.target
Wants=network.target

如果它不是作为前提条件您需要满足的主机网络,那么您需要create a custom systemd target 并在您的After/Wants 中引用它。

【讨论】:

是的,它不是主机网络,而是 Podman CNI 桥接网络,所以如果我没记错的话,必须启动它。因此,根据您的回答来表达我的问题,它在自定义 systemd 目标中添加了什么? @fahrradflucht:见unix.stackexchange.com/a/301999/15312 对不起,我可能应该更清楚地表达这一点。我仍然需要我在目标之后/想要中引用的服务,不是吗? Podman 在容器启动时创建的 CNI 接口是什么?这基本上是我问题的核心,而不是一般的系统机制(我或多或少理解)。如果我的问题不清楚,如果你能帮我改写一下,我会很高兴。 是的,您需要两项服务;您可以使用 systemd 启动 podman 容器:access.redhat.com/documentation/en-us/…;如果您不希望通过 systemd 启动它,那么您仍然需要创建一个虚拟服务,例如轮询某个端点或检查一些先决条件并仅在检测到容器启动时解除阻塞。 您的用例似乎适合目标和Requires=xyz 的 systemd 机制。我怀疑您面临的问题可能已经有了解决方案,如果文档中没有,他们团队中的某个人可能会提供帮助。如果您认为自己遇到了错误,我会检查他们是否有 slack/irc/discord 频道或任何类型的支持论坛。【参考方案2】:

我现在通过向主机服务依赖项添加一个 oneshot systemd 服务单元来解决这个问题,该服务单元使用 Podman 运行一个立即退出的 alpine 容器,该依赖项使用 Podman 运行一个立即退出的 alpine 容器。这会“欺骗”Podman 启动桥接网络接口。

不那么老套的解决方案仍然非常受欢迎。

【讨论】:

podman使用指南(代码片段)

...有创建的容器都会被限制。SD_NOTIFY:如果将podman命令放入systemd单元文件中,容器进程可以通过podman返回通知,表明服务已准备好接收任务。socket激活:可以将连接的socket从systemd传递到podman,并传递到容器进程以便使用它们。废话... 查看详情

centos8的podman容器

...不能通过守护进程去实现自动重启容器的功能,可以通过Systemd守护进程管理来开机启动容器。同时,podman也不需要sudo访问(Rootless)。  podman来运行nginx容器,命令和docker一样,而且笔者使用的是docker的官方镜像docker.io/li... 查看详情

podman执行参数与命令

...核,所以docker原来大部份的命令,还是可以使用在/usr/lib/systemd/system目录下新建文件名.service文件 查看详情

podman(代码片段)

...一个开源的容器运行时项目,可在大多数Linux平台上使用。Podman提供与Docker非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有root权限的情况下运行。Podman可以管理... 查看详情

如何在 systemd 启动期间最后运行并打印我的脚本输出?

】如何在systemd启动期间最后运行并打印我的脚本输出?【英文标题】:Howtorunlastandprintmyscriptoutputduringbootwithsystemd?【发布时间】:2014-12-1600:07:33【问题描述】:我正在尝试在部署过程中配置我的主机,并在屏幕上显示我的配置脚... 查看详情

systemd 服务未使用 dbus 接口启动

】systemd服务未使用dbus接口启动【英文标题】:systemdservicenotstartingusingdbusinterface【发布时间】:2015-07-1503:36:02【问题描述】:我正在尝试启动systemd服务usnigdbus服务。我正在关注下面提到的链接的示例5:http://www.freedesktop.org/softwar... 查看详情

使用 gdbus 启动 systemd 服务

】使用gdbus启动systemd服务【英文标题】:Usinggdbustostartasystemdservice【发布时间】:2015-10-0314:58:19【问题描述】:我创建了一个新的systemd服务,我希望能够通过dbus调用来激活它。该服务只是执行一个shell脚本。我在这里定义了服务... 查看详情

podman.命令集锦

...可以作为普通用户运行,而无需额外的权限。Podman在内部使用Buildah(1)来创建容器图像。两个工具共享图像(而不是容器 查看详情

systemd的新特性及unit常见类型分析

参考技术Asystemd是Linux下的中央系统及设定管理程式(init),包括有守护进程,程序库跟应用程序。开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并以此实现系统初始化时服务的并行启动,同时达到降低shell的系统... 查看详情

docker大势已去,podman即将崛起(代码片段)

...是Podman?Podman和Docker的主要区别是什么?Podman的使用与docker有什么区别?Podman常用命令容器镜像部署PodmanPodman加速器使用Podman运行一个容器列出运行的容器检查正在运行的容器查看一个运行中容器的日志查看一个运行... 查看详情

FFmpeg 手动启动,但在启动时不使用 Systemd

】FFmpeg手动启动,但在启动时不使用Systemd【英文标题】:FFmpegstartingmanuallybutnotwithSystemdonboot【发布时间】:2020-11-0221:26:07【问题描述】:在带有官方Debian10映像的RaspberryPi4B4GB上,我有/home/pi/run.sh脚本,其中包含以下内容:#!/bin/b... 查看详情

ubuntu17.04使用systemd设置开机启动

ubuntu从16.04开始不再使用initd管理系统,改用systemd。然而systemd很难用,刚开始接触有点烦,改变太大,跟之前的完全不同。吐槽完开始正题:使用systemd设置开机启动为了像以前一样,在/etc/rc.local中设置开... 查看详情

systemd的理解和systemctl使用

...处理,而基于init的启动系统被认为有效率不足的问题,systemd是Linux系统机器的另一种启动方式,宣称弥补了以传统LinuxSysVinit为基础的系统的缺点。银河麒麟操作系统V4版采用了systemd。理解Linux启动过程在我们打开Linu 查看详情

一款简单的内网穿透工具,无需安装即可使用

...传递流量,则根据需要重新启动它。1、安装AutoSSH2、使用Systemd只适用于CentOS7、Debian8+、Ubuntu16+等。开始启动并设置开机自启:最后更多的命令和使用可以直接查看官方文档 查看详情

ubuntu17.04使用systemd设置开机启动

ubuntu从16.04开始不再使用initd管理系统,改用systemd。然而systemd很难用,刚开始接触有点烦,改变太大,跟之前的完全不同。吐槽完开始正题:使用systemd设置开机启动为了像以前一样,在/etc/rc.local中设置开... 查看详情

通过 python 和 dbus 启动用户 systemd 服务

】通过python和dbus启动用户systemd服务【英文标题】:Startingauserssystemdserviceviapythonanddbus【发布时间】:2017-06-2414:41:18【问题描述】:可以通过dbus使用systemd的管理器来控制服务,例如:Startingasystemdserviceviapython使用这个:importdbussys... 查看详情

centos8容器管理工具podman(代码片段)

...CentOS8系统,装完发现没有Docker了,后来发现CentOS8使用Podman作为默认的容器管理工具了,大概看了一下帮助,其实Podman的用法几乎和原来的docker一样,命令基本都一样。下面就看看Podman怎样来管理容器吧。安装... 查看详情

Google Colab 上的 MongoDB:系统尚未使用 systemd 启动

】GoogleColab上的MongoDB:系统尚未使用systemd启动【英文标题】:MongoDBonGoogleColab:Systemhasnotbeenbootedwithsystemd【发布时间】:2021-04-0617:04:12【问题描述】:在GoogleColab上成功安装MySQL和Spark之后,我变得更加雄心勃勃,我正在尝试在Googl... 查看详情