Podman容器实战:从安装到部署Nginx的完整教程

Podman 是一个无需守护进程的容器引擎,命令与 Docker 高度兼容,适合希望减少 root 服务依赖、提升隔离性的场景。
本文用一台全新 CentOS 7 或 Ubuntu 20.04 服务器演示 Podman 容器实战:从安装、配置镜像加速,到运行 Nginx 并挂载网站目录,最后验证访问。

环境准备与安装

以下步骤假设你已通过 SSH 登录服务器,并拥有 sudo 权限。
CentOS 7 和 Ubuntu 20.04 的安装命令略有不同,请按系统选择。

CentOS 7 安装:

sudo yum install -y podman

Ubuntu 20.04 安装:

sudo apt update
sudo apt install -y podman

安装完成后,检查版本:

podman --version

如果输出版本号(如 podman version 3.4.4),说明安装成功。
若提示找不到命令,请确认软件源是否正常,或尝试 sudo yum makecache 后重装。

配置国内镜像加速

Podman 默认从 Docker Hub 拉取镜像,国内网络可能较慢。
可以修改配置文件,使用国内镜像站。
编辑 /etc/containers/registries.conf,在文件末尾添加:

unqualified-search-registries = ["docker.io"]

[[registry]]
prefix = "docker.io"
location = "docker.io"

[[registry.mirror]]
location = "hub-mirror.c.163.com"

保存后,Podman 会自动尝试镜像加速。
注意:不同 Podman 版本配置语法可能有差异,如果拉取镜像时提示 mirror 相关错误,可暂时注释掉 mirror 部分,或查阅对应版本文档。

运行第一个 Nginx 容器

拉取 Nginx 官方镜像:

podman pull nginx:alpine

alpine 标签表示基于 Alpine Linux 的精简镜像,体积较小。
拉取完成后,用以下命令启动容器:

podman run -d --name mynginx -p 8080:80 nginx:alpine

参数解释:

  • -d:后台运行
  • --name mynginx:容器命名为 mynginx
  • -p 8080:80:将宿主机 8080 端口映射到容器 80 端口
  • nginx:alpine:使用的镜像

执行后,查看容器状态:

podman ps

如果看到 mynginx 状态为 Up,说明容器已运行。
此时在浏览器访问 http://服务器IP:8080,应能看到 Nginx 欢迎页。
如果无法访问,请检查服务器防火墙是否放行 8080 端口:

sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

Ubuntu 系统可使用 sudo ufw allow 8080。

挂载网站目录实现持久化

容器内的文件在容器删除后会丢失,生产环境需要把网站目录挂载到宿主机。
先创建本地目录:

mkdir -p /data/nginx/html

然后停止并删除旧容器:

podman stop mynginx
podman rm mynginx

重新运行,并挂载目录:

podman run -d --name mynginx -p 8080:80 -v /data/nginx/html:/usr/share/nginx/html:Z nginx:alpine

注意 :Z 标签用于 SELinux 环境,CentOS 7 默认开启 SELinux,不加可能导致容器内无法读取文件。
Ubuntu 通常不需要,但加上也不影响。

在宿主机创建测试页面:

echo "Hello Podman" > /data/nginx/html/index.html

再次访问 http://服务器IP:8080,应显示 Hello Podman。

常见报错与避坑

报错:Error: error creating container storage: the container name "mynginx" is already in use
说明已有同名容器存在。执行 podman rm mynginx 删除旧容器,或换一个名称。

报错:permission denied 访问挂载目录
通常是 SELinux 导致。确认挂载时加了 :Z 或 :z 标签。如果仍不行,可临时执行 sudo setenforce 0 测试,但生产环境不建议关闭 SELinux,应正确使用标签。

容器启动后立即退出
用 podman logs mynginx 查看日志。常见原因是配置文件错误或端口冲突。若端口被占用,可改用其他宿主机端口,如 -p 8081:80。

Podman 与 Docker 命令差异
Podman 支持大部分 Docker 命令,但 docker-compose 需换成 podman-compose,且 Podman 默认以当前用户运行容器。若需 root 权限运行,可使用 sudo podman,但建议优先使用普通用户模式。

验证与日常管理

检查容器运行状态:

podman ps -a

查看容器日志:

podman logs mynginx

进入容器内部:

podman exec -it mynginx /bin/sh

设置容器开机自启(需 root 权限):

sudo podman generate systemd --new --name mynginx > /etc/systemd/system/mynginx.service
sudo systemctl daemon-reload
sudo systemctl enable --now mynginx

注意:podman generate systemd 在不同版本中语法可能变化,
如果报错,
请使用 podman generate systemd --help 查看当前版本支持参数。

完成以上步骤后,你已经掌握了 Podman 容器实战的基本流程:安装、配置镜像、运行容器、挂载数据卷和排错。
后续可以继续尝试用 Podman 部署 MySQL、Redis 等常用服务,操作方式与 Nginx 类似。

常见问题

Podman 和 Docker 能同时安装吗?
可以,但两者命令可能冲突。如果已安装 Docker,建议使用 alias docker=podman 或直接使用 podman 命令,避免混淆。

普通用户运行 Podman 需要什么条件?
需要系统启用用户命名空间。CentOS 7 和 Ubuntu 20.04 默认支持,但部分内核参数可能限制。若普通用户运行失败,可尝试 sudo sysctl user.max_user_namespaces=15000 并写入 /etc/sysctl.conf。

Podman 容器如何随系统启动?
推荐用 systemd 管理,参考上文 podman generate systemd 步骤。注意该命令生成的 unit 文件依赖 Podman 版本,升级后可能需要重新生成。

如何删除所有停止的容器?
执行 podman container prune,按提示确认即可。

分享到:
上一篇
用 Rancher 管理 K8s 集群:从导入到验证的完整操作
下一篇
OpenStack部署实战:从零搭建最小可用私有云环境
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意