跳转到主内容

Podman Desktop 1.20 发布

·22 分钟阅读
Vladyslav Zhukovskyi
高级软件工程师

Podman Desktop 1.20 发布! 🎉

podman-desktop-hero-1.20

Podman Desktop 1.20 现已可用。 点击此处下载

此版本带来了令人兴奋的新功能和改进:

  • 批量启动所有容器:新增的批量运行按钮允许您一次性启动多个选定的容器,从而在启动容器堆栈时节省时间。
  • 切换用户和集群:在 Podman Desktop 内部无缝切换活动的 Kubernetes 集群和用户上下文,使多集群工作流变得更加容易。
  • 在扩展列表中按描述搜索:不仅可以通过名称搜索,还可以通过描述中的关键字来更快地找到扩展。
  • 从资源页面更新提供程序:直接从资源页面轻松更新您的容器引擎或 Kubernetes 提供程序,以实现更简化的升级过程。
  • 本地扩展开发模式:生产二进制文件现在允许您在启用开发模式后加载并实时测试本地扩展,无需在开发/监视模式下运行 Podman Desktop。
  • 即时停止实时容器日志:现在您可以在不关闭日志窗口的情况下停止容器的实时日志流。这让您对资源使用和调试工作流有更多控制。
  • 新的社区页面网站:我们网站上新增的社区页面可帮助您与其他用户联系、查找资源并参与 Podman Desktop 的开发。

发布详情 🔍

批量启动所有容器

如果您有多个容器需要运行,现在无需再逐个启动。Podman Desktop 在容器视图中提供了一个 “全部运行” 按钮,只需单击一下即可启动所有选定的容器。这使得一次性启动多个服务或整个应用程序栈变得更加方便。对于已在运行的容器,系统会智能地跳过,因此批量启动操作只专注于启动已停止的容器。

Containers List pageContainers List page

切换用户和集群

Podman Desktop 的 Kubernetes 集成现在支持在不同集群和用户帐户之间轻松切换上下文。您可以直接通过应用程序 UI 更改活动的 Kubernetes 集群和用户,而无需编辑配置文件或使用外部 CLI 命令。这对于在多个环境中工作的开发人员尤其有用——例如,从开发集群切换到生产集群(或使用不同的用户凭据)现在只需点击几下即可完成。它通过让您在 Podman Desktop 内部无缝地切换上下文,简化了多集群工作流程。

Edit Kubernetes Context pageEdit Kubernetes Context page

按描述搜索扩展

扩展市场的搜索功能得到了改进,帮助您更轻松地发现工具。以前,搜索扩展只能匹配扩展名称。在 Podman Desktop 1.20 中,搜索栏还会检索扩展的描述。这意味着您可以输入与扩展功能或主题相关的关键字,即使该关键字不在扩展名称中,相关的扩展也会出现。现在,通过扩展的功能来查找它们,而不仅仅是名称,变得更加容易了。

Extensions pageExtensions page

从资源页面更新提供程序

管理您的容器和 Kubernetes 提供程序变得更加容易。Podman Desktop 中的 资源 页面(列出了您的容器引擎和 Kubernetes 环境)现在允许直接更新这些提供程序。如果某个提供程序(例如 Podman、Docker 或 Kubernetes 虚拟机)有新版本可用,您可以直接从 Podman Desktop 的界面触发升级。无需手动运行更新命令或离开应用程序;只需快速点击一下,即可让您的开发环境保持最新版本。

Resources pageResources page

本地扩展开发模式

扩展开发者现在可以在“偏好设置”中切换开发模式,并从新的“本地扩展”选项卡中添加一个本地文件夹。Podman Desktop 将会监视该文件夹,加载扩展,并在重启后保持跟踪,其行为与在生产环境中的表现完全一致。您可以直接从 UI 启动、停止或取消跟踪扩展,从而缩短了构建和调试附加组件的反馈循环,无需额外的命令行标志或特殊的开发构建版本。

Resources pageResources page

即时停止实时容器日志

容器日志查看器现在可以在数据流中途取消,允许您在不再需要时停止跟踪日志。以前,一旦打开容器的日志,输出会持续流动,直到关闭日志窗口。通过此更新,正在进行的日志流可以通过取消操作来中断,而无需关闭日志窗格,从而让您更好地控制日志监控。这项改进通过按需停止日志流,有助于避免冗余的日志输出和不必要的资源消耗。

新社区页面

我们在 Podman Desktop 网站上推出了一个新的 社区 页面,以更好地连接我们的用户和贡献者。该页面是所有社区相关资源的中心枢纽:您可以找到加入我们 Discord 频道的链接、参与 GitHub 讨论、在社交平台上关注我们等等。它还重点介绍了为项目做出贡献的方式,无论是报告问题、编写代码还是改进文档。无论您是想分享反馈、结识其他 Podman Desktop 爱好者,还是参与开发,社区页面都是您的起点。


社区致谢

🎉 我们要向所有帮助 Podman Desktop 变得更好的朋友们表示衷心的感谢。在此次发布中,我们收到了以下人员的拉取请求:


最后说明

此版本中修复的完整问题列表可在此处 这里这里 找到。

请从网站的 下载 部分获取最新版本,用 Podman Desktop 助力您的开发之旅。此外,欢迎访问我们的 GitHub 仓库,看看您能如何帮助我们把 Podman Desktop 做得更好。

详细发布变更日志

功能 💡

  • feat: 为消息框添加下拉选项,由 @gastoner 贡献 #13049
  • feat(table): 添加 key 属性,由 @axel7083 贡献 #12994
  • feat(table): 为折叠按钮添加可访问性标签,由 @axel7083 贡献 #12979
  • feat: 为开发中的扩展添加徽章,由 @benoitf 贡献 #12951
  • feat: 新的社区页面网站,由 @cdrage 贡献 #12748
  • feat: 允许从资源页面更新提供程序,由 @SoniaSandler 贡献 #12729
  • feat(extension-api): 拉取镜像支持取消令牌,由 @axel7083 贡献 #12706
  • feat(ui): 创建通用图标,由 @gastoner 贡献 #12677
  • feat: 添加按钮以批量启动所有容器,由 @MarsKubeX 贡献 #12646
  • feat: 支持 EventStore 的细粒度窗口事件,由 @feloy 贡献 #12636
  • feat: 使 window.logsContainer 可取消,由 @feloy 贡献 #12624
  • feat(extension): 在扩展列表中按描述搜索,由 @omertuc 贡献 #12519
  • feat: 添加切换用户和集群功能,由 @gastoner 贡献 #12445
  • feat: 允许使用生产二进制文件开发扩展,由 @benoitf 贡献 #10731

修复 🔨

  • fix: Pod 名称在 k8s 中不工作,由 @eqqe 贡献 #13066
  • fix: 不搜索完整路径可执行文件,由 @feloy 贡献 #13060
  • fix: 当没有正在运行的容器引擎时不显示表格,由 @SoniaSandler 贡献 #13051
  • fix: 增加等待 kubeconfig 创建的超时时间,由 @feloy 贡献 #13050
  • fix(ContainerList): 同名容器组应有独立的组,由 @axel7083 贡献 #13002
  • fix: 更改 podman machine 流关闭函数上下文,由 @SoniaSandler 贡献 #12982
  • fix: 使容器或 vm 连接终端在启动和重启时响应,由 @SoniaSandler 贡献 #12981
  • fix: 迁移到 vitest v 3.2.x 后的测试错误,由 @dgolovin 贡献 #12965
  • fix: 添加更好的检查以在开发模式下检测 Podman Desktop 扩展,由 @benoitf 贡献 #12954
  • fix: 更新 compose 入门指南中的 docker 兼容性链接,由 @SoniaSandler 贡献 #12923
  • fix(patch): 修补 kubernetes/client-node 包,由 @gastoner 贡献 #12919
  • fix(frontend): 按 groupId 对容器进行分组,由 @axel7083 贡献 #12915
  • fix: 更改细粒度事件的分隔符,由 @feloy 贡献 #12914
  • fix: 在状态栏中显示 VM 连接,由 @feloy 贡献 #12910
  • fix: 在不再需要时清理 electron-updater 缓存,由 @dgolovin 贡献 #12870
  • fix: 当上下文离线时分发资源计数事件,由 @feloy 贡献 #12834
  • fix(frontend): 容器列表表格显示竞争条件,由 @axel7083 贡献 #12833
  • fix: 避免在修补资源时发送 status 字段,由 @benoitf 贡献 #12810
  • fix: 当 vm 连接注册/注销时刷新提供程序,由 @feloy 贡献 #12805
  • fix: 主页上重复的标题,由 @statickidz 贡献 #12802
  • fix: 将容器连接状态发送给扩展 API 监听器,由 @jeffmaury 贡献 #12794
  • fix: 删除错误放置的归档文件,更新 .gitignore,由 @odockal 贡献 #12793
  • fix: 移除对 d-bus 的完全访问权限并添加缺失的 --talk-name 选项,由 @dgolovin 贡献 #12778
  • fix: BuildImageFromContainerfile.spec.ts 中的不稳定测试,由 @dgolovin 贡献 #12777
  • fix: 日志文件名扩展名未定义,由 @jiridostal 贡献 #12774
  • fix: macOS 启动时最小化 plist,由 @cblecker 贡献 #12768
  • fix: 扩展安装期间的错误与其他组件重叠,由 @jiridostal 贡献 #12741
  • fix: 组件属性中的错误文本导致发送错误的遥测数据,由 @MarsKubeX 贡献 #12737
  • fix: 更新可用模态框中的错误边距,由 @MarsKubeX 贡献 #12728
  • fix: 保存的输出恢复后终端提示符重复,由 @dgolovin 贡献 #12725
  • fix: 当一个 informer 离线时清除所有资源的缓存,由 @feloy 贡献 #12714
  • fix: 细粒度的 configuration-changed,由 @feloy 贡献 #12700
  • fix: ContainerListCompose.spec.ts 中的未捕获异常,由 @dgolovin 贡献 #12681
  • fix: ContainerList.spec.ts 中的未捕获异常,由 @dgolovin 贡献 #12680
  • fix: 更新静态图片链接,由 @SoniaSandler 贡献 #12651
  • fix: 解决通过入门指南安装的 kubectl 的卸载版本错误,由 @bmahabirbu 贡献 #12426
  • fix: 使镜像构建可取消,由 @dgolovin 贡献 #12261
  • fix(ci): 提前执行 ubuntu 包的更新 (backport #13177),由 @mergify[bot] 贡献,详见 #13181
  • revert: 12870 (backport #13152),由 @mergify[bot] 贡献,详见 #13180

chore ✅

  • chore: 使用聚合方式报告 activateExtension 事件,由 @benoitf 贡献 #13071
  • chore: 使用新的聚合方法跟踪 createProviders,由 @benoitf 贡献 #13064
  • chore: 为遥测添加聚合方法,由 @benoitf 贡献 #13063
  • chore: 引入 inversify 绑定,由 @benoitf 贡献 #13062
  • chore(tray): 更新现有的托盘图标,由 @vancura 贡献 #13057
  • chore: 为 inversify 的 DI 添加装饰器/注解,由 @benoitf 贡献 #13043
  • chore: 将 storybook 更新到 v9,由 @benoitf 贡献 #13037
  • chore: 修改社区会议录像链接,由 @rujutashinde 贡献 #12997
  • chore(deps-dev): 切换到 prettier 3.6.2,由 @jeffmaury 贡献 #12995
  • chore: 将 disposable group 移动到 API 包,由 @benoitf 贡献 #12992
  • chore: 引入 inversify 库,由 @benoitf 贡献 #12978
  • chore: 在 containerList.spec.ts 中将 mockclear 移动到 beforeeach,由 @MarsKubeX 贡献 #12963
  • chore: 将 podman 更新到 v5.5.2,由 @benoitf 贡献 #12960
  • chore: 修复拼写错误,由 @benoitf 贡献 #12955
  • chore: 允许在开发模式下无错误地移除扩展,由 @benoitf 贡献 #12953
  • chore: 为 devMode 添加颜色,由 @benoitf 贡献 #12942
  • chore: 在 nsis 中设置 oneClick 为 false 和 perMachine 为 false,由 @cdrage 贡献 #12941
  • chore: 在扩展元数据中添加 devMode,由 @benoitf 贡献 #12940
  • chore(podman): 移除 `node:fs` 函数的 promisify 用法,由 @axel7083 贡献 #12906
  • chore: 移除 svelte 检查警告,由 @MarsKubeX 贡献 #12892
  • chore(core): 移除不必要的 dns 配置,由 @axel7083 贡献 #12891
  • chore: 升级 biomejs 到 v2,由 @benoitf 贡献 #12885
  • chore: 当扩展 id 从扩展加载器加载/移除时通知开发文件夹实例,由 @benoitf 贡献 #12875
  • chore: 停止发送 kubernetesExecIntoContainer 事件,由 @MarsKubeX 贡献 #12873
  • chore: 从扩展加载器中暴露一个方法:ensureExtensionIsEnabled,由 @benoitf 贡献 #12871
  • chore(website): 修改暗黑模式下链接的页脚颜色,由 @rujutashinde 贡献 #12860
  • chore: 修复 .github 问题模板以添加项目 id,由 @rujutashinde 贡献 #12859
  • chore(issue-template): 在 bug_report.yml 中添加 1.19.2,由 @axel7083 贡献 #12844
  • chore: addProviderMenuItem - 如果提供程序不存在则添加,由 @cdrage 贡献 #12841
  • chore: 移除从 YAML 创建 k8s 的易出错元数据,由 @bmahabirbu 贡献 #12837
  • chore: 正确类型保护 micromark 监听器的 e.target,由 @cdrage 贡献 #12818
  • chore: 修改 github 问题模板以添加项目,由 @rujutashinde 贡献 #12796
  • chore(e2e): 根据操作系统更改压力测试中预期的 img 数量,由 @danivilla9 贡献 #12789
  • chore: 将 podman 更新到 v5.5.1,由 @benoitf 贡献 #12762
  • chore: 跟踪扩展的所有更改,由 @benoitf 贡献 #12743
  • chore: 从 electron builder 配置中移除 notarize 选项,由 @odockal 贡献 #12719
  • chore(e2e): 将 scrollintoviewifneeded 添加到 ui-stress-test,由 @danivilla9 贡献 #12689
  • chore(e2e): 重构 extension-installation-smoke 测试用例,由 @danivilla9 贡献 #12665
  • chore: 更新社交网络链接,由 @vancura 贡献 #12662
  • chore: 将 svelte 升级到 5.28.3,由 @feloy 贡献 #12650
  • chore(workflows): 为 publish-website-pr-cloudflare.yaml 设置权限,由 @axel7083 贡献 #12631
  • chore(workflows): 为 e2e-main.yaml 设置权限,由 @axel7083 贡献 #12630
  • chore(workflows): 为 e2e-kubernetes-main.yaml 设置权限,由 @axel7083 贡献 #12629
  • chore(workflows): 为 downloads-count.yaml 设置权限,由 @axel7083 贡献 #12625
  • chore: 在发布工作流中添加生成 sbom 的作业,由 @SoniaSandler 贡献 #12603
  • chore: 更新 Flatpak 横幅,由 @Eonfge 贡献 #12594
  • chore: 仅在我们开始监视后发送监视事件,由 @benoitf 贡献 #12590
  • chore: 在表格组件中添加对比度更高的边框,由 @SoniaSandler 贡献 #12583
  • chore: 使首选项中的文件项可清除,由 @SoniaSandler 贡献 #12473
  • chore(deps): 将 electron-builder 升级到 v26,由 @axel7083 贡献 #12351
  • chore: 从对话框中移除 no-explicit-any,由 @cdrage 贡献 #11480

重构 🛠️

  • refactor(mock): 简化在 mock 对象上调用方法的方式,由 @benoitf 贡献 #13072
  • refactor: 将消息框接口移动到 api 包,由 @benoitf 贡献 #13007
  • refactor: 将状态栏 api 提取到 api 包,由 @benoitf 贡献 #13006
  • refactor: 将菜单 api 移动到 API 包,由 @benoitf 贡献 #13005
  • refactor: 将配置接口移动到 api 包,由 @benoitf 贡献 #12999
  • refactor: 将事件移动到 API 端,由 @benoitf 贡献 #12996
  • refactor(ui/table): 用 reduce 替换 filter#map#flat 链,由 @axel7083 贡献 #12967
  • refactor(podman): 将 podman-install.ts 移动到正确的文件夹,由 @axel7083 贡献 #12936
  • refactor(table): 移除不必要的绑定,由 @axel7083 贡献 #12934
  • refactor(types): 为 Table 添加泛型,由 @axel7083 贡献 #12933
  • refactor(podman): 将 PodmanInfo 提取到专用文件,由 @axel7083 贡献 #12911
  • refactor(core): 将默认协议配置移动到 Main,由 @axel7083 贡献 #12905
  • refactor(podman): 将 MacOSInstaller 提取到专用文件,由 @axel7083 贡献 #12904
  • refactor(podman): 将 `WinInstaller` 提取到专用文件,由 @axel7083 贡献 #12899
  • refactor(frontend): 使 ContainerGroupPartInfoUI 的 id 属性不可为空,由 @axel7083 贡献 #12896
  • refactor(podman): 将 getBundledPodmanVersion 接口提取到文件,由 @axel7083 贡献 #12894
  • refactor(podman): 将 `Installer` 接口提取到专用文件,由 @axel7083 贡献 #12887
  • refactor: 将文件系统树构建移动到后端,由 @feloy 贡献 #12872
  • refactor(podman): 将 BaseInstaller 提取到专用文件,由 @axel7083 贡献 #12811
  • refactor(podman): 将 WinBitCheck 提取到专用文件,由 @axel7083 贡献 #12712
  • refactor(podman): 将 WinVersionCheck 提取到专用文件,由 @axel7083 贡献 #12705
  • refactor(podman): 将 WinMemoryCheck 类提取到专用文件,由 @axel7083 贡献 #12702
  • refactor(podman): 将 WSL2Check 类提取到专用文件,由 @axel7083 贡献 #12699
  • refactor(ui): 在 ui svelte 库中使用新的图标组件,由 @gastoner 贡献 #12678
  • refactor(extension/podman): 提取 WSLVersionCheck,由 @axel7083 贡献 #12664

测试 🚦

  • chore(test): 失败时重置 podman machine,由 @cbr7 贡献 #13034
  • chore(test): 改进 auth-utility playwright 代码库,由 @odockal 贡献 #13022
  • chore(test): 在 e2e 测试中清理挂起的 podman machine,由 @cbr7 贡献 #13019
  • chore(test): 为检查更新测试创建异常,由 @cbr7 贡献 #12993
  • chore(test): cicd 上的导航时间更长,由 @cbr7 贡献 #12991
  • chore(test): 修复断言超时不足的问题,由 @cbr7 贡献 #12977
  • chore(test): 为方法调用添加超时参数,由 @cbr7 贡献 #12966
  • chore(test): 为正确的消息在需要时抛出错误,由 @cbr7 贡献 #12964
  • chore(test): 在失败时获取抛出的错误,由 @cbr7 贡献 #12961
  • chore(test): 在操作前等待页面完全加载,由 @cbr7 贡献 #12938
  • chore(test): 在修剪容器 e2e 测试中提高鲁棒性,由 @cbr7 贡献 #12922
  • chore(test): 仅在需要时在 Kind 集群上安装 ingress 控制器,由 @amisskii 贡献 #12839
  • chore(test): 增加 cicd 的超时时间,由 @cbr7 贡献 #12787
  • fix(tests): 修复 KubernetesTerminal 不稳定测试,由 @dgolovin 贡献 #12780
  • fix(tests): 不稳定的 Typeahead.spec.ts,由 @dgolovin 贡献 #12779
  • chore(test): 移除 race promise,由 @cbr7 贡献 #12752
  • chore(test): 共享 e2e 测试认证功能,由 @odockal 贡献 #12704
  • chore(test): 为外部 e2e 测试使用已安装的 electron 二进制文件,由 @odockal 贡献 #12688
  • chore(test): 添加 openshift docker e2e 测试,由 @cbr7 贡献 #12676
  • chore(test): 在 Windows CI 上稳定 Kubernetes e2e 测试,由 @amisskii 贡献 #12554
  • test(e2e): 将镜像推送到 kubernetes 集群并用 pod 重用它,由 @danivilla9 贡献 #12427
  • chore(test): 添加状态栏提供程序测试,由 @xbabalov 贡献 #12352

文档 📖

  • docs: 更新在受限环境中安装的步骤…,由 @shipsing 贡献 #12949
  • docs: 根据最新更改更新了程序步骤,由 @shipsing 贡献 #12907
  • docs: 删除了一个不再按预期工作的博客,由 @shipsing 贡献 #12855
  • docs(website): 更新了教程部分,由 @shipsing 贡献 #12763
  • docs(website): 添加了管理 kube 上下文的步骤,由 @shipsing 贡献 #12750
  • docs(website): 修复了格式问题,由 @shipsing 贡献 #12672
  • docs(website): 1.19 版本发布说明,由 @axel7083 贡献 #12602
  • docs(website): 在发现 PD 页面上添加了自定义 UI 的详细信息,由 @shipsing 贡献 #12575
  • docs(website): 添加 podman desktop core 博客,由 @Firewall 贡献 #12497
  • docs: 添加 Podman AI Lab OpenVINO 博客,由 @jeffmaury 贡献 #12496
  • docs(windows): 更新卸载说明,由 @wngtk 贡献 #12349

ci 🔁

  • ci: 为 argos 完全隐藏 github 按钮,由 @cdrage 贡献 #12596