本文档用于指导AI助手在阿里PAI DSW(Kubernetes pod)环境中安装和配置Podman,包括持久化存储的处理方案。
/mnt/data/xiedong/docker_cache (ossfs2 FUSE文件系统)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
bash展开代码apt-get install -y podman
说明:
bash展开代码podman --version podman info podman ps
Podman不能像Docker那样直接配置存储路径到ossfs2文件系统
原因:
truncate等文件系统操作file resize error: truncate ... operation not supportedDocker vs Podman对比:
"data-root": "/mnt/data/xiedong/docker_cache/docker"由于不能直接配置存储路径,采用以下方案:
/var/lib/containers/storage (本地文件系统)podman save/load命令工作流程:
创建持久化目录:
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
运行容器时挂载持久化目录:
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
原因: 网络受限,无法访问Docker Hub
解决方案:
/etc/containers/registries.conf)错误: file resize error: truncate ... operation not supported
原因: 尝试将存储路径配置到ossfs2文件系统
解决方案:
/etc/containers/storage.conf指向ossfs2路径错误: permission denied
解决方案:
chmod 755 /mnt/data/xiedong/docker_cache| 特性 | Docker | Podman |
|---|---|---|
| 守护进程 | 需要dockerd | 无需守护进程 |
| 存储路径配置 | ✅ 支持 (data-root) | ❌ ossfs2不支持 |
| 持久化方案 | 直接配置路径 | 导出/导入镜像 |
| 命令兼容性 | - | 完全兼容Docker命令 |
| 容器环境 | 可能崩溃(29.1.5 bug) | 更稳定 |
镜像管理:
podman_save_images.sh导出镜像到持久化存储数据持久化:
-v挂载持久化目录网络问题:
资源清理:
bash展开代码# 清理未使用的镜像
podman image prune
# 清理未使用的容器
podman container prune
/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当用户要求安装Podman时:
apt-get install -y podman,无需配置守护进程/etc/containers/storage.conf指向ossfs2路径podman save/load实现持久化podman ps验证是否正常工作安装完成后检查:
podman --versionpodman ps 无错误/mnt/data/xiedong/docker_cache/imagespodman_save_images.shpodman_load_images.sh最后更新: 2026-01-23 适用环境: 阿里PAI DSW (Ubuntu 22.04, Kubernetes pod, ossfs2存储)


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