如何在mac上安装podman

安装 Podman 在 macOS 上

在 macOS 上安装 Podman 需要使用 Podman 的桌面客户端工具 Podman Desktop 或通过 Homebrew 安装命令行工具。

使用 Homebrew 安装 Podman:

(base) ninjamac@ninjamacdeMacBook-Air shell % brew install podman
==> Auto-updating Homebrew...
Adjust how often this is run with HOMEBREW_AUTO_UPDATE_SECS or disable with
HOMEBREW_NO_AUTO_UPDATE. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Auto-updated Homebrew!
Updated 3 taps (kong/deck, homebrew/core and homebrew/cask).
==> New Formulae
clang-include-graph             claude-squad                    kargo
==> New Casks
firezone                passepartout            simpledemviewer         slideshowerYou have 46 outdated formulae installed.==> Downloading https://ghcr.io/v2/homebrew/core/podman/manifests/5.5.0
######################################################################################## 100.0%
==> Fetching podman
==> Downloading https://ghcr.io/v2/homebrew/core/podman/blobs/sha256:8326e41b43e41f71fa6cf9c321
######################################################################################## 100.0%
==> Pouring podman--5.5.0.arm64_sequoia.bottle.tar.gz
==> Caveats
In order to run containers locally, podman depends on a Linux kernel.
One can be started manually using `podman machine` from this package.
To start a podman VM automatically at login, also install the cask
"podman-desktop".zsh completions have been installed to:/opt/homebrew/share/zsh/site-functions
==> Summary
🍺  /opt/homebrew/Cellar/podman/5.5.0: 202 files, 79.3MB
==> Running `brew cleanup podman`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`)

安装完成后初始化 Podman 虚拟机(由于 macOS 不支持 Linux 容器原生运行,Podman 会创建一个轻量级虚拟机来运行容器):

(base) ninjamac@ninjamacdeMacBook-Air shell % podman machine init
Looking up Podman Machine image at quay.io/podman/machine-os:5.5 to create VM
Getting image source signatures
Copying blob d8d46037edd8 done   | 
Copying config 44136fa355 done   | 
Writing manifest to image destination
d8d46037edd878510cbcaabb4878e59e5d9eaa98d0c73eef883cd98491b08e96
Extracting compressed file: podman-machine-default-arm64.raw: done  
Machine init complete

启动 Podman 虚拟机:

(base) ninjamac@ninjamacdeMacBook-Air shell % podman machine start
Starting machine "podman-machine-default"This machine is currently configured in rootless mode. If your containers
require root permissions (e.g. ports < 1024), or if you run into compatibility
issues with non-podman clients, you can switch using the following command:podman machine set --rootfulAPI forwarding listening on: /var/folders/_0/8glqp3v96vx0_rzhlqb8g3xr0000gn/T/podman/podman-machine-default-api.sockThe system helper service is not installed; the default Docker API socket
address can't be used by podman. If you would like to install it, run the following commands:sudo /opt/homebrew/Cellar/podman/5.5.0/bin/podman-mac-helper installpodman machine stop; podman machine startYou can still connect Docker API clients by setting DOCKER_HOST using the
following command in your terminal session:export DOCKER_HOST='unix:///var/folders/_0/8glqp3v96vx0_rzhlqb8g3xr0000gn/T/podman/podman-machine-default-api.sock'Machine "podman-machine-default" started successfully

验证 Podman 是否正确安装:

(base) ninjamac@ninjamacdeMacBook-Air shell % podman version
Client:        Podman Engine
Version:       5.5.0
API Version:   5.5.0
Go Version:    go1.24.3
Built:         Wed May 14 02:59:13 2025
Build Origin:  brew
OS/Arch:       darwin/arm64Server:       Podman Engine
Version:      5.5.0
API Version:  5.5.0
Go Version:   go1.23.8
Git Commit:   0dbcb51477ee7ab8d3b47d30facf71fc38bb0c98
Built:        Tue May 13 08:00:00 2025
OS/Arch:      linux/arm64(base) ninjamac@ninjamacdeMacBook-Air shell % podman info   
Client:APIVersion: 5.5.0BuildOrigin: brewBuilt: 1747162753BuiltTime: Wed May 14 02:59:13 2025GitCommit: ""GoVersion: go1.24.3Os: darwinOsArch: darwin/arm64Version: 5.5.0
host:arch: arm64buildahVersion: 1.40.0cgroupControllers:- cpu- io- memory- pidscgroupManager: systemdcgroupVersion: v2conmon:package: conmon-2.1.12-3.fc41.aarch64path: /usr/bin/conmonversion: 'conmon version 2.1.12, commit: 'cpuUtilization:idlePercent: 99.56systemPercent: 0.27userPercent: 0.17cpus: 4databaseBackend: sqlitedistribution:distribution: fedoravariant: coreosversion: "41"eventLogger: journaldfreeLocks: 2045hostname: localhost.localdomainidMappings:gidmap:- container_id: 0host_id: 1000size: 1- container_id: 1host_id: 100000size: 1000000uidmap:- container_id: 0host_id: 501size: 1- container_id: 1host_id: 100000size: 1000000kernel: 6.12.13-200.fc41.aarch64linkmode: dynamiclogDriver: journaldmemFree: 1293139968memTotal: 2042273792networkBackend: netavarknetworkBackendInfo:backend: netavarkdns:package: aardvark-dns-1.14.0-1.fc41.aarch64path: /usr/libexec/podman/aardvark-dnsversion: aardvark-dns 1.14.0package: netavark-1.14.0-1.fc41.aarch64path: /usr/libexec/podman/netavarkversion: netavark 1.14.0ociRuntime:name: crunpackage: crun-1.20-2.fc41.aarch64path: /usr/bin/crunversion: |-crun version 1.20commit: 9c9a76ac11994701dd666c4f0b869ceffb599a66rundir: /run/user/501/crunspec: 1.0.0+SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +CRIU +LIBKRUN +WASM:wasmedge +YAJLos: linuxpasta:executable: /usr/bin/pastapackage: passt-0^20250121.g4f2c8e7-2.fc41.aarch64version: |pasta 0^20250121.g4f2c8e7-2.fc41.aarch64-pastaCopyright Red HatGNU General Public License, version 2 or later<https://www.gnu.org/licenses/old-licenses/gpl-2.0.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.remoteSocket:exists: truepath: unix:///run/user/501/podman/podman.sockrootlessNetworkCmd: pastasecurity:apparmorEnabled: falsecapabilities: CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOTrootless: trueseccompEnabled: trueseccompProfilePath: /usr/share/containers/seccomp.jsonselinuxEnabled: trueserviceIsRemote: trueslirp4netns:executable: /usr/bin/slirp4netnspackage: slirp4netns-1.3.1-1.fc41.aarch64version: |-slirp4netns version 1.3.1commit: e5e368c4f5db6ae75c2fce786e31eef9da6bf236libslirp: 4.8.0SLIRP_CONFIG_VERSION_MAX: 5libseccomp: 2.5.5swapFree: 0swapTotal: 0uptime: 0h 38m 35.00svariant: v8
plugins:authorization: nulllog:- k8s-file- none- passthrough- journaldnetwork:- bridge- macvlan- ipvlanvolume:- local
registries:search:- docker.io
store:configFile: /var/home/core/.config/containers/storage.confcontainerStore:number: 3paused: 0running: 1stopped: 2graphDriverName: overlaygraphOptions: {}graphRoot: /var/home/core/.local/share/containers/storagegraphRootAllocated: 106415992832graphRootUsed: 4448870400graphStatus:Backing Filesystem: xfsNative Overlay Diff: "true"Supports d_type: "true"Supports shifting: "false"Supports volatile: "true"Using metacopy: "false"imageCopyTmpDir: /var/tmpimageStore:number: 1runRoot: /run/user/501/containerstransientStore: falsevolumePath: /var/home/core/.local/share/containers/storage/volumes
version:APIVersion: 5.5.0BuildOrigin: 'Copr: packit/containers-podman-26126'Built: 1747094400BuiltTime: Tue May 13 08:00:00 2025GitCommit: 0dbcb51477ee7ab8d3b47d30facf71fc38bb0c98GoVersion: go1.23.8Os: linuxOsArch: linux/arm64Version: 5.5.0

配置 Podman 环境

Podman 在 macOS 上运行需要依赖虚拟机,默认使用 QEMU 运行轻量级 Linux 环境。可以通过以下命令调整虚拟机配置:

调整虚拟机 CPU 和内存(可选):

podman machine stop
podman machine set --cpus 4 --memory 8192
podman machine start

运行容器

运行一个简单的测试容器(例如 Nginx):

podman run -d -p 8080:80 --name nginx docker.io/library/nginx

验证容器是否运行:

(base) ninjamac@ninjamacdeMacBook-Air shell % podman ps               
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS         PORTS                 NAMES
88288e7b6232  docker.io/library/nginx:latest  nginx -g daemon o...  58 seconds ago  Up 58 seconds  0.0.0.0:8080->80/tcp  nginx

访问运行中的容器服务(在浏览器中打开 http://localhost:8080)。

管理容器和镜像

列出本地所有镜像:

podman images

从 Docker Hub 拉取镜像:

podman pull ubuntu:latest

进入运行中的容器:

(base) ninjamac@ninjamacdeMacBook-Air shell % podman exec -it nginx /bin/bash
root@88288e7b6232:/# 

停止和删除容器:

podman stop nginx
podman rm nginx

构建自定义镜像

创建一个简单的 Dockerfile:

FROM alpine:latest
RUN apk add --no-cache python3
CMD ["python3", "--version"]

使用 Podman 构建镜像:

(base) ninjamac@ninjamacdeMacBook-Air podman % podman build -t my-python-images .
STEP 1/3: FROM alpine:latest
Resolved "alpine" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/alpine:latest...
Getting image source signatures
Copying blob sha256:d69d4d41cfe2ee680d6972795e2a1eb9e4dc4ec3b3c5e0797c9ab43bb3726fa7
Copying config sha256:2abc5e83407155714f171c293f197e1310176959e106f8ad63ffa2e7e9635d4a
Writing manifest to image destination
STEP 2/3: RUN apk add --no-cache python3
fetch https://dl-cdn.alpinelinux.org/alpine/v3.22/main/aarch64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.22/community/aarch64/APKINDEX.tar.gz
(1/17) Installing libbz2 (1.0.8-r6)
(2/17) Installing libexpat (2.7.1-r0)
(3/17) Installing libffi (3.4.8-r0)
(4/17) Installing gdbm (1.24-r0)
(5/17) Installing xz-libs (5.8.1-r0)
(6/17) Installing libgcc (14.2.0-r6)
(7/17) Installing libstdc++ (14.2.0-r6)
(8/17) Installing mpdecimal (4.0.1-r0)
(9/17) Installing ncurses-terminfo-base (6.5_p20250503-r0)
(10/17) Installing libncursesw (6.5_p20250503-r0)
(11/17) Installing libpanelw (6.5_p20250503-r0)
(12/17) Installing readline (8.2.13-r1)
(13/17) Installing sqlite-libs (3.49.2-r0)
(14/17) Installing python3 (3.12.11-r0)
(15/17) Installing python3-pycache-pyc0 (3.12.11-r0)
(16/17) Installing pyc (3.12.11-r0)
(17/17) Installing python3-pyc (3.12.11-r0)
Executing busybox-1.37.0-r18.trigger
OK: 49 MiB in 33 packages
--> 48a838f69aa8
STEP 3/3: CMD ["python3", "--version"]
COMMIT my-python-images
--> daf80a07597c
Successfully tagged localhost/my-python-images:latest
daf80a07597cfe6a88325506732ce1fd95a10a3fe9c44b38f0ea7a512bc1d5c9
(base) ninjamac@ninjamacdeMacBook-Air podman % podman images
REPOSITORY                  TAG         IMAGE ID      CREATED        SIZE
localhost/my-python-images  latest      daf80a07597c  8 seconds ago  53.8 MB
docker.io/library/alpine    latest      2abc5e834071  4 days ago     8.81 MB
docker.io/library/nginx     latest      997e7f255061  6 weeks ago    202 MB

运行自定义镜像:

podman run --rm my-python-image

持久化存储和数据卷

创建一个数据卷并挂载到容器:

podman volume create my_volume
podman run -d -v my_volume:/data --name volume_test alpine tail -f /dev/null

进入容器验证数据卷:

podman exec -it volume_test /bin/sh

网络配置

创建一个自定义网络:

(base) ninjamac@192 xx % podman network create my_network
my_network

运行容器并使用自定义网络:

podman run -d --network my_network --name web nginx
podman run -it --network my_network --name client alpine ping web

调试和日志检查

查看容器日志:

podman logs nginx

检查容器详细配置:

podman inspect nginx

监控容器资源使用:

(base) ninjamac@192 xx % podman statsID            NAME         CPU %       MEM USAGE / LIMIT  MEM %       NET IO             BLOCK IO    PIDS        CPU TIME    AVG CPU %
b059483e17f4  volume_test  0.01%       53.25kB / 2.042GB  0.00%       3.006kB / 1.398kB  0B / 0B     1           1.564638s   0.01%

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/84104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QGraphicsView中鼠标点击与移动事件传递给MainWindow

在Qt图形应用程序开发中,QGraphicsView和QGraphicsScene框架提供了强大的2D图形显示功能。然而,当我们需要在主窗口(MainWindow)中处理这些视图中的鼠标事件。 问题背景 在典型的Qt图形应用程序架构中: MainWindow └── QGraphicsView└── QGraphicsScene└── QGra…

Spring Boot 缓存注解详解:@Cacheable、@CachePut、@CacheEvict(超详细实战版)

&#x1f4a1; 前言 在高并发、高性能的系统开发中&#xff0c;缓存是提升接口响应速度和降低数据库压力的重要手段。Spring Boot 提供了强大的缓存抽象层 —— spring-context-support&#xff0c;并结合 JSR-107 标准&#xff0c;提供了多个缓存注解&#xff0c;如&#xff…

vue中ref的详解以及react的ref对比

文章目录 1. ref是什么2. ref的使用3. ref的特性4. 使用场景5. 注意事项6. 与 React 的对比7. 动态 ref8. 函数式组件中的 ref9. 组合式 API 中的 ref10. 总结 1. ref是什么 ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。可以通过实例对象…

通过ca证书的方式设置允许远程访问Docker服务

设置允许远程访问Docker服务 使用场景 环境 系统&#xff1a;anolis7.9 修改Docker服务配置&#xff0c;配置安全证书 生成ca证书到/etc/docker目录中&#xff0c;后续会要用到 #该步骤需要设置密码&#xff0c;后面步骤会要用到&#xff0c;此处设置密码为123456 openss…

Qt Quick Layout功能及架构

Qt Quick Layouts 是 Qt Quick 中用于管理用户界面布局的模块&#xff0c;在 Qt 6.0 中继续提供强大的布局管理功能。 一、主要功能 主要布局类型 RowLayout - 水平排列项目 ColumnLayout - 垂直排列项目 GridLayout - 网格排列项目 StackLayout - 堆叠项目&#xff08;一…

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…

从 ClickHouse、Druid、Kylin 到 Doris:网易云音乐 PB 级实时分析平台降本增效

网易云音乐基于 Apache Doris 替换了早期架构中 Kylin、Druid、Clickhouse、Elasticsearch、HBase 等引擎&#xff0c;统一了实时分析架构&#xff0c;并广泛应用于广告实时数仓、日志平台和会员报表分析等典型场景中&#xff0c;带来导入性能提升 3&#xff5e;30 倍&#xff…

Android 本地存储路径说明

一、背景 作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过: File sdCard Environment.getExternalStorageDirectory(); 获取SD卡根目录,然后自定义文件/文件名进行文件存储.这样做法的结果就是,当手机安装了大量的app时&#xff0c;SD卡根目录会…

开发的几种格式,TCP的十个重要机制

自定义协议中&#xff0c; 我们有几种常见的数据格式&#xff1a; 1.xml 通过标签来组织数据 请求&#xff1a; 优势&#xff1a; 让数据的可读性变更好了 劣势&#xff1a; 标签非常繁琐&#xff0c;传输的时候也占用更多网络带宽&#xff08;maven会使用xml来管理项目配…

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…

任务调度器-关于中心化调度 vs 去中心化调度的核心区别

1. 定义与架构模型 维度中心化调度去中心化调度核心角色存在一个中央调度器&#xff08;如XXL-JOB的调度中心&#xff09;&#xff0c;统一管理任务分配、状态监控和故障处理。无中心节点&#xff0c;调度逻辑分散在多个节点&#xff0c;通过共识算法&#xff08;如选举机制&a…

[论文阅读] 人工智能+软件工程 | 结对编程中的知识转移新图景

当AI成为编程搭档&#xff1a;结对编程中的知识转移新图景 论文信息 论文标题&#xff1a;From Developer Pairs to AI Copilots: A Comparative Study on Knowledge Transfer&#xff08;从开发者结对到AI副驾驶&#xff1a;知识转移的对比研究&#xff09; 作者及机构&#…

CAD多面体密堆积3D插件

插件介绍 CAD多面体密堆积3D插件可在AutoCAD内建立三维随机多面体密堆积模型。 插件内置物理动力学模拟算法&#xff0c;通过模拟重力、碰撞等现象&#xff0c;使多面体在虚拟环境中发生自然堆积&#xff0c;进而实现真实的堆积效果。多面体堆积模拟中存在的局部穿模问题可通…

VSCode CUDA C++进行Linux远程开发

环境准备 确保在本地和远程Linux服务器上安装了以下软件&#xff1a; Visual Studio Code&#xff08;简称VS Code&#xff09;Remote Development extension pack for VS CodeCUDA Toolkit&#xff0c;推荐版本为11.0或更高GCC编译器&#xff0c;用于C代码的编译 此外&…

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…

快速使用 Flutter Card 组件指南

目录 一、引言 二、Card 的基本用法 三、主要属性 3.1 elevation (阴影高度) 3.2 shape (形状) 3.3 color (颜色) 3.4 margin (外边距) 3.5 完整示例 四、结合 ListTile 组件使用 五、带图片的 Card 示例 六、注意事项 相关推荐 一、引言 Card 是 Flutter 提供的一个…

C语言内存管理和编译优化实战

参考&#xff1a; C语言内存管理“玄学”&#xff1a;从崩溃到精通的避坑指南C语言编译优化实战&#xff1a;从入门到进阶的高效代码优化技巧

【产品业务设计】支付业务设计规范细节记录,含订单记录、支付业务记录、支付流水记录、退款业务记录

【产品业务设计】支付业务设计规范细节记录&#xff0c;含订单记录、支付业务记录、支付流水记录 前言 我为什么要写这个篇文章 总结设计经验生成设计模板方便后期快速搭建 一个几张表 一共5张表&#xff1b; 分别是&#xff1a; 订单主表&#xff1a;jjy_orderMain订单产…

CppCon 2015 学习:Live Lock-Free or Deadlock

这段内容是介绍一场关于**“实用无锁编程&#xff08;Practical Lock-Free Programming&#xff09;”**的讲座提纲&#xff0c;重点在C中的并发编程。下面是详细的中文理解和分析&#xff1a; 讲座大纲和内容理解 主题概览 适当的“guru崇拜”和“祈求” → 开场调侃&#…