如何让Rootless Podman识别并使用现有Docker容器?
在Rootless Podman中复用Docker的镜像与容器
Docker和Rootless Podman的存储系统相互独立,默认情况下Podman无法识别Docker的镜像和容器。以下是本地测试场景下的几种解决方法:
迁移Docker镜像到Rootless Podman
方法1:导出导入法(简单通用)
- 用Docker导出目标镜像:
sudo docker save -o my-image.tar <镜像名:标签> - 切换到普通用户(Rootless Podman必须以非root身份运行),导入镜像到Podman:
podman load -i my-image.tar - 验证导入结果:
podman images
方法2:用Skopeo直接复制(更高效)
Skopeo可在不同容器存储后端直接复制镜像,无需导出成文件:
- 安装Skopeo(未安装时):
sudo apt install skopeo - 复制Docker镜像到Rootless Podman的存储:
sudo skopeo copy docker-daemon:<镜像名:标签> containers-storage:localhost/<镜像名:标签> - 给复制后的镜像赋予当前用户权限:
sudo chown -R $USER:$USER ~/.local/share/containers/storage
复用Docker容器(推荐重新创建)
容器迁移比镜像复杂,因Docker和Podman的配置、网络模型存在差异,更推荐基于迁移后的镜像重新创建Podman容器:
- 查看Docker容器的运行参数:
sudo docker inspect <容器名/容器ID> - 从输出中提取关键参数(如端口映射
-p、挂载卷-v、启动命令、环境变量-e等),用Podman重新创建:podman run -d --name <新容器名> -p 8080:80 -v /host/path:/container/path <镜像名:标签> <启动命令>
若需直接迁移容器文件系统:
- 导出Docker容器的文件系统:
sudo docker export -o container-fs.tar <容器ID> - 将导出的文件系统导入为Podman镜像:
podman import container-fs.tar <新镜像名:test> - 基于新镜像创建Podman容器:
podman run -d --name <新容器名> <新镜像名:test>
直接共享Docker存储(不推荐,仅测试用)
若不想迁移,可让Rootless Podman直接使用Docker的存储目录,但可能导致两者互相干扰:
- 编辑Podman的存储配置文件:
nano ~/.config/containers/storage.conf - 修改以下两行配置(替换为Docker的存储路径):
runroot = "/run/docker" graphroot = "/var/lib/docker" - 给当前用户赋予Docker存储目录的权限:
sudo chown -R $USER:$USER /var/lib/docker /run/docker - 重启Podman服务:
systemctl --user restart podman
内容的提问来源于stack exchange,提问作者TimSO
相关产品推荐
相关产品推荐

