Podman安装配置经验沉淀文档
2026-01-23
Linux运维
00

目录

Podman安装配置经验沉淀文档
📋 文档目的
🎯 环境信息
✅ 安装步骤
1. 更新apt源(使用阿里云镜像)
2. 安装Podman
3. 验证安装
⚠️ 重要限制:持久化存储配置
问题说明
解决方案:导出/导入镜像
🔧 配置方案
方案1: 使用默认路径 + 导出镜像(推荐)
方案2: 挂载持久化目录到容器
📝 完整安装脚本示例
🚀 常用命令
基本操作
镜像操作
容器操作
🔍 故障排查
问题1: 无法拉取镜像(网络超时)
问题2: 存储路径配置失败
问题3: 权限问题
📊 与Docker的对比
💡 最佳实践
📚 相关文件位置
🎓 给AI助手的提示
✅ 检查清单

Podman安装配置经验沉淀文档

📋 文档目的

本文档用于指导AI助手在阿里PAI DSW(Kubernetes pod)环境中安装和配置Podman,包括持久化存储的处理方案。

🎯 环境信息

  • 平台: 阿里PAI DSW(Data Science Workshop)
  • 系统: Ubuntu 22.04.5 LTS (jammy)
  • 环境: Kubernetes pod容器环境
  • 持久化存储: /mnt/data/xiedong/docker_cache (ossfs2 FUSE文件系统)
  • 特点: 无systemd,网络可能受限(需要国内镜像源)

✅ 安装步骤

1. 更新apt源(使用阿里云镜像)

bash
展开代码
# 配置apt使用阿里云镜像源 sed -i 's|http://archive.ubuntu.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list sed -i 's|http://security.ubuntu.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list apt-get update

2. 安装Podman

bash
展开代码
apt-get install -y podman

说明:

  • Podman会自动安装依赖:buildah, conmon, crun, containernetworking-plugins等
  • 安装后即可使用,无需启动守护进程(与Docker不同)

3. 验证安装

bash
展开代码
podman --version podman info podman ps

⚠️ 重要限制:持久化存储配置

问题说明

Podman不能像Docker那样直接配置存储路径到ossfs2文件系统

原因:

  • Podman使用boltdb数据库存储元数据,需要truncate等文件系统操作
  • ossfs2是FUSE文件系统,不支持某些底层文件操作(如truncate)
  • 直接配置会导致错误:file resize error: truncate ... operation not supported

Docker vs Podman对比:

  • ✅ Docker: 可以配置 "data-root": "/mnt/data/xiedong/docker_cache/docker"
  • ❌ Podman: 不能直接配置到ossfs2路径

解决方案:导出/导入镜像

由于不能直接配置存储路径,采用以下方案:

  1. Podman使用默认路径: /var/lib/containers/storage (本地文件系统)
  2. 通过导出/导入实现持久化: 使用podman save/load命令

🔧 配置方案

方案1: 使用默认路径 + 导出镜像(推荐)

工作流程:

  1. 构建/拉取镜像 → 存储在默认路径
  2. 导出镜像 → 保存到持久化存储
  3. 需要时导入 → 从持久化存储恢复

创建持久化目录:

bash
展开代码
mkdir -p /mnt/data/xiedong/docker_cache/images

导出镜像脚本 (podman_save_images.sh):

bash
展开代码
#!/bin/bash IMAGES_DIR="/mnt/data/xiedong/docker_cache/images" mkdir -p "$IMAGES_DIR" for image in $(podman images --format "{{.Repository}}:{{.Tag}}" | grep -v "<none>" | grep -v "REPOSITORY"); do filename=$(echo "$image" | sed 's/\//_/g' | sed 's/:/_/g') tarfile="$IMAGES_DIR/${filename}.tar" echo "导出镜像: $image -> $tarfile" podman save -o "$tarfile" "$image" done

导入镜像脚本 (podman_load_images.sh):

bash
展开代码
#!/bin/bash IMAGES_DIR="/mnt/data/xiedong/docker_cache/images" for tarfile in $(find "$IMAGES_DIR" -name "*.tar" -type f); do echo "导入镜像: $tarfile" podman load -i "$tarfile" done

方案2: 挂载持久化目录到容器

运行容器时挂载持久化目录:

bash
展开代码
podman run -v /mnt/data/xiedong/docker_cache:/data ubuntu:20.04

📝 完整安装脚本示例

bash
展开代码
#!/bin/bash set -e echo "开始安装Podman..." # 1. 更新apt源 echo "配置apt镜像源..." sed -i 's|http://archive.ubuntu.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list sed -i 's|http://security.ubuntu.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list apt-get update # 2. 安装Podman echo "安装Podman..." apt-get install -y podman # 3. 创建持久化目录 echo "创建持久化存储目录..." mkdir -p /mnt/data/xiedong/docker_cache/images # 4. 创建导出脚本 cat > /mnt/data/xiedong/git_code/podman_save_images.sh <<'EOF' #!/bin/bash IMAGES_DIR="/mnt/data/xiedong/docker_cache/images" mkdir -p "$IMAGES_DIR" for image in $(podman images --format "{{.Repository}}:{{.Tag}}" | grep -v "<none>" | grep -v "REPOSITORY"); do filename=$(echo "$image" | sed 's/\//_/g' | sed 's/:/_/g') tarfile="$IMAGES_DIR/${filename}.tar" echo "导出镜像: $image -> $tarfile" podman save -o "$tarfile" "$image" done EOF # 5. 创建导入脚本 cat > /mnt/data/xiedong/git_code/podman_load_images.sh <<'EOF' #!/bin/bash IMAGES_DIR="/mnt/data/xiedong/docker_cache/images" for tarfile in $(find "$IMAGES_DIR" -name "*.tar" -type f); do echo "导入镜像: $tarfile" podman load -i "$tarfile" done EOF # 6. 添加执行权限 chmod +x /mnt/data/xiedong/git_code/podman_save_images.sh chmod +x /mnt/data/xiedong/git_code/podman_load_images.sh # 7. 验证安装 echo "验证Podman安装..." podman --version podman ps echo "" echo "==========================================" echo "Podman安装完成!" echo "持久化镜像目录: /mnt/data/xiedong/docker_cache/images" echo "导出脚本: /mnt/data/xiedong/git_code/podman_save_images.sh" echo "导入脚本: /mnt/data/xiedong/git_code/podman_load_images.sh" echo "=========================================="

🚀 常用命令

基本操作

bash
展开代码
# 查看版本 podman --version # 查看信息 podman info # 查看容器 podman ps # 运行中的容器 podman ps -a # 所有容器 # 查看镜像 podman images

镜像操作

bash
展开代码
# 拉取镜像 podman pull ubuntu:20.04 # 构建镜像 podman build -t myimage:latest . # 导出镜像到持久化存储 podman save -o /mnt/data/xiedong/docker_cache/images/myimage.tar myimage:latest # 从持久化存储导入镜像 podman load -i /mnt/data/xiedong/docker_cache/images/myimage.tar # 删除镜像 podman rmi myimage:latest

容器操作

bash
展开代码
# 运行容器 podman run -it ubuntu:20.04 bash # 后台运行 podman run -d --name mycontainer ubuntu:20.04 sleep 3600 # 挂载持久化目录 podman run -v /mnt/data/xiedong/docker_cache:/data ubuntu:20.04 # 启动/停止容器 podman start mycontainer podman stop mycontainer # 进入容器 podman exec -it mycontainer bash # 删除容器 podman rm mycontainer

🔍 故障排查

问题1: 无法拉取镜像(网络超时)

原因: 网络受限,无法访问Docker Hub

解决方案:

  • 使用国内镜像源(如阿里云容器镜像服务)
  • 配置镜像加速器(需要修改/etc/containers/registries.conf

问题2: 存储路径配置失败

错误: file resize error: truncate ... operation not supported

原因: 尝试将存储路径配置到ossfs2文件系统

解决方案:

  • 不要配置/etc/containers/storage.conf指向ossfs2路径
  • 使用默认路径,通过导出/导入实现持久化

问题3: 权限问题

错误: permission denied

解决方案:

  • 确保以root用户运行,或配置用户命名空间
  • 检查目录权限:chmod 755 /mnt/data/xiedong/docker_cache

📊 与Docker的对比

特性DockerPodman
守护进程需要dockerd无需守护进程
存储路径配置✅ 支持 (data-root)❌ ossfs2不支持
持久化方案直接配置路径导出/导入镜像
命令兼容性-完全兼容Docker命令
容器环境可能崩溃(29.1.5 bug)更稳定

💡 最佳实践

  1. 镜像管理:

    • 定期使用podman_save_images.sh导出镜像到持久化存储
    • 重要镜像及时导出备份
  2. 数据持久化:

    • 容器数据通过-v挂载持久化目录
    • 镜像通过导出/导入方式保存
  3. 网络问题:

    • 使用国内镜像源
    • 配置镜像加速器
  4. 资源清理:

    bash
    展开代码
    # 清理未使用的镜像 podman image prune # 清理未使用的容器 podman container prune

📚 相关文件位置

  • Podman安装脚本: /mnt/data/xiedong/git_code/install_podman.sh (可创建)
  • 导出镜像脚本: /mnt/data/xiedong/git_code/podman_save_images.sh
  • 导入镜像脚本: /mnt/data/xiedong/git_code/podman_load_images.sh
  • 持久化镜像目录: /mnt/data/xiedong/docker_cache/images
  • 使用说明文档: /mnt/data/xiedong/git_code/podman使用说明.md

🎓 给AI助手的提示

当用户要求安装Podman时:

  1. 直接安装: 使用apt-get install -y podman,无需配置守护进程
  2. 持久化存储:
    • ❌ 不要尝试配置/etc/containers/storage.conf指向ossfs2路径
    • ✅ 创建导出/导入脚本,使用podman save/load实现持久化
  3. 验证: 安装后运行podman ps验证是否正常工作
  4. 文档: 提供使用说明,特别是持久化存储的处理方式

✅ 检查清单

安装完成后检查:

  • Podman版本: podman --version
  • Podman可用: podman ps 无错误
  • 持久化目录已创建: /mnt/data/xiedong/docker_cache/images
  • 导出脚本已创建: podman_save_images.sh
  • 导入脚本已创建: podman_load_images.sh
  • 脚本有执行权限

最后更新: 2026-01-23 适用环境: 阿里PAI DSW (Ubuntu 22.04, Kubernetes pod, ossfs2存储)

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!