在 Podman 中,创建并启动容器的核心命令是 podman run,该命令会自动完成 “拉取镜像(若本地不存在)→ 创建容器 → 启动容器” 的完整流程,如下图:

podman run 命令通过搭配不同选项,可满足端口映射、数据持久化、环境配置等多种需求。下面将详细进行说明:
podman run [选项] 镜像名[:标签] [容器内执行的命令]
参数说明:
选项:命令支持的选项,如 -d 后台运行
镜像名:用来创建容器的镜像名称,如:ubuntu
标签:镜像的版本信息,如:latest,ubuntu:latest 则使用最新版本的 ubuntu 镜像来创建容器。
容器内执行的命令:可选,默认执行镜像内置的启动命令(如 Nginx 镜像默认启动 nginx 服务)。
点击查看完整的 podman run 命令手册。
前台运行容器的核心是不添加 -d(后台)选项,让容器主进程直接关联当前终端,日志会实时输出到终端,方便实时查看运行状态和调试。
命令如下:
podman run nginx
打开终端,执行“podman run nginx”命令,将基于 nginx:latest 镜像启动容器,前台运行(终端显示 Nginx 日志),按 Ctrl+C 停止容器。如下图:

容器后台运行(守护进程模式)的核心是通过 -d(--detach)选项,让容器脱离当前终端在后台运行,不占用终端且能长期提供服务,是日常部署服务的常用方式。
命令如下:
podman run -d --name my-nginx nginx
选项说明:
-d(--detach):后台运行,不占用当前终端。
--name my-nginx:指定容器名称,自定义名称便于后续操作,如 my-nginx。
打开终端,运行上面命令,效果如下图:

继续执行podman ps 命令,可以看到名称为 my-nginx 的运行中容器。如下图:

默认情况下,容器处于独立网络命名空间,内部服务仅能被宿主机或同一 Pod 内的关联容器访问,外部设备(如同一局域网内的其他电脑、手机)无法直接连接。需通过 -p(--publish)选项手动映射宿主机端口到容器端口,实现端口转发,外部才能通过宿主机的映射端口访问容器内服务。
命令如下:
podman run -d -p 8080:80 --name my-nginx nginx
选项说明:
-p 宿主机端口:容器端口,此处将宿主机 8080 端口映射到容器 80 端口(Nginx 默认端口)。
打开终端,执行上述命令,效果如下图:

然后,在宿主机或同一网络设备通过 http://宿主机IP:8080 即可访问 Nginx 服务。如下图:

容器的文件系统属于临时存储,删除容器后,其内部数据(如配置文件、日志、数据库数据等)会随容器一起被清理。为避免数据丢失,需通过 -v(--volume)选项将宿主机的目录或文件挂载到容器内指定路径,实现数据持久化 —— 即容器内的读写操作会直接作用于宿主机的挂载目录,即使容器被删除,数据仍保存在宿主机中,新建容器时重新挂载即可复用。
命令如下:
podman run -d -p 8080:80 \ -v /本地目录/nginx/html:/usr/share/nginx/html \ -v /本地目录/nginx/conf:/etc/nginx/conf.d \ --name my-nginx nginx
选项说明:
-v 宿主机路径:容器内路径,此处挂载了 Nginx 的网页目录和配置目录。
注意:宿主机修改 /本地目录/nginx/html 中的文件,容器内 Nginx 实时生效;容器删除后,文件仍保存在宿主机。
打开终端,运行如下命令,效果如下图:

注意,在执行上述命令前需要现在 C 盘分别创建 C:/nginx/html 和 C:/nginx/conf 目录。
然后在 C:/nginx/html 目录创建一个 index.html 文件,如下图:

文件内容如下:
<h1>hello, podman</h1>
继续在 C:/nginx/conf 目录下创建 simple.conf 配置文件,内容如下:
# 定义服务块,监听 80 端口
server {
listen 80; # 容器内监听 80 端口(与端口映射的容器端口一致)
server_name localhost; # 匹配本地访问,也可改为实际域名(如 example.com)
# 静态资源配置
root /usr/share/nginx/html; # 容器内静态资源根目录(与挂载的 html 目录对应)
index index.html index.htm; # 默认索引文件
# 访问日志配置(可选,便于排查)
access_log /var/log/nginx/simple-access.log;
error_log /var/log/nginx/simple-error.log;
# 静态文件访问优化(可选)
location ~* \.(html|htm|css|js|jpg|jpeg|png|gif)$ {
expires 1d; # 浏览器缓存 1 天
add_header Cache-Control "public";
}
# 404 页面配置(可选)
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
}保存后,你可以打开 Podman Desktop,选择名为 my-nginx 的容器,点击查看容器详情,选择 Terminal,打开终端,分别查看 /usr/share/nginx/html 和 /etc/nginx/conf.d 目录下的内容:

上图显示的内容,是不是我们在 Windows 中 C 盘创建的内容,说明目录映射成功了。
接着,分别执行如下命令,重启容器:
# 停止容器 podman stop my-nginx # 启动容器 podman start my-nginx
再次使用浏览器访问 http://localhost:8080 地址,效果如下图:

交互式启动的核心是通过 -it 组合选项,为容器分配交互式终端,启动后直接进入容器内部命令行,方便实时调试、执行命令或修改配置。
例如:
podman run -it --name my-ubuntu ubuntu:22.04 /bin/bash
选项说明:
-i(--interactive):保持输入交互。
-t(--tty):分配伪终端(终端界面)。
执行上述命令将启动后直接进入容器的 bash 终端,可执行 ls、apt 等命令,输入 exit 退出并停止容器。例如:

注意,如果本地没有 ubuntu:22.04 镜像,将自动拉取镜像,然后运行一个容器。
在 Podman 中,通过环境变量向容器内应用传递参数是一种灵活的配置方式,无需修改容器镜像即可动态调整应用行为(如数据库地址、日志级别、端口号等)。
可以通过 -e(--env)选项或 --env-file 选项实现传递环境变量。
示例:使用 alpine 镜像(轻量 Linux 系统),通过环境变量传递 MY_ENV1 和 MY_ENV2,然后进入容器执行命令打印这些变量,直观观察效果。
podman run -it -e "MY_ENV1=hello" -e "MY_ENV2=world" --name env-demo alpine:latest /bin/sh
效果如下图:

下面演示如何通过环境变量文件批量传递环境变量到容器,步骤如下:
(1)创建一个环境变量文件,假如名称为 my.env,内容如下:
# 这是注释行 MY_ENV1=hello MY_ENV2=world
注意,一行一个定义一个环境变量。
(2)通过 --env-file 启动容器
podman run -it --env-file D:/my.env --name env-file-demo alpine:latest /bin/sh
效果如下图:

Podman 提供了丰富的选项来限制容器对 CPU 和内存的资源占用,避免单个容器过度消耗宿主机资源,影响其他服务。
下面命令将对容器 CPU 核心和最大内存进行限制,更多用法请参考命令手册。
命令如下:
podman run -d --cpus 0.5 --memory 512m --name my-ubuntu ubuntu:24.04
选项说明:
--cpus 0.5:限制容器使用最多 0.5 个 CPU 核心。
--memory 512m:限制容器最大使用 512MB 内存。
注意,如果你采用的 rootless 模式运行上述命令,不支持限制,因此你设置的 --cpus 0.5 和 --memory 512m 选项被忽略了。如下图:

到这里,podman 如何创建容器就介绍完了,更多信息可以阅读 podman run 命令帮助文档。