Docker部署Podman:Docker环境里部署
本文面向已经在使用 Docker 的用户,教你如何在同一条服务器上额外安装 Podman,并让两者互不干扰地工作。
全程命令可复制执行,零基础也行。
准备工作:查看当前 Docker 版本与系统环境
先确认你已经有 Docker,并且系统是 CentOS 7+、Ubuntu 18.04+ 或主流 Linux 发行版。
打开终端执行:
docker --version
cat /etc/os-release
记录下系统版本和 Docker 版本,后面安装 Podman 时需要根据系统选择对应源。
如果 Docker 正在运行生产容器,建议先备份数据或选择业务低峰期操作。
安装 Podman 并让它与 Docker 和平共处
Podman 的设计目标就是兼容 Docker CLI,大部分 docker 命令可以直接换成 podman。
但默认安装后两者可能争抢容器网络端口或镜像存储目录,这里提供一套稳妥的安装方法。
1. 安装 Podman
根据你的系统使用包管理器安装。
- CentOS / RHEL / Rocky Linux:
sudo dnf install -y podman
- Ubuntu / Debian:
sudo apt update
sudo apt install -y podman
安装完成后检查版本:
podman --version
如果提示 podman: command not found,说明安装失败,需要先添加官方源(Ubuntu 可以用 sudo apt install podman 通常就行)。
2. 配置镜像存储路径不冲突
Docker 默认把镜像放在 /var/lib/docker,Podman 默认放在 /var/lib/containers。
一般情况下它们不会冲突,但为了保险,确认一下:
podman info | grep -i store
如果输出显示路径不是 /var/lib/containers,建议重置为默认值。
3. 避免端口冲突:让 Podman 使用独立的容器网络
Docker 默认创建 docker0 桥接网络,Podman 有自己的 cni-podman0。
如果要同时运行需要映射相同端口的容器(例如两个 Nginx 都占 80),需要手动分配不同主机端口,或者让 Podman 使用 host 网络模式。
普通用户暂时不要改动,直接正常使用即可。
避坑指南:高频问题与解决方案
问题 1:podman pull 报错 short-name resolution
这是 Podman 默认需要配置容器注册表。
执行:
sudo vim /etc/containers/registries.conf
找到 unqualified-search-registries 这一行,确保包含 ["docker.io"]。
如果没有,加上。
保存后重新拉取。
问题 2:podman run --rm -p 80:80 nginx 提示端口被占
说明 Docker 已经占了 80 端口。
先用 docker ps 检查并停掉占用端口的容器,或者让 Podman 映射其他主机端口:
podman run --rm -p 8080:80 nginx
然后通过 http://服务器IP:8080 访问。
问题 3:Podman 创建用户需要 root 权限?
非 root 用户也可以跑 Podman,但需要开启用户命名空间。
安装后默认已经支持,如果报错 permission denied,检查当前用户是否在 subuid 和 subgid 文件中:
cat /etc/subuid
如果没有当前用户,
用 sudo usermod --add-subuids 100000-165536 --add-subgids 100000-165536 $USER 添加,
然后重新登录。
效果验证:用同一份 Dockerfile 同时测试两者
创建一个测试目录:
mkdir ~/test-podman && cd ~/test-podman
编写一个最简单的 Dockerfile:
FROM nginx:alpine
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
先用 Docker 构建并运行:
docker build -t test-nginx .
docker run -d --name docker-nginx -p 8081:80 test-nginx
访问 http://服务器IP:8081,看到 Nginx 首页。
然后用 Podman 构建并运行(注意命令基本相同):
podman build -t test-nginx-podman .
podman run -d --name podman-nginx -p 8082:80 test-nginx-podman
访问 http://服务器IP:8082,同样显示 Nginx 首页。
最后清理:
docker stop docker-nginx && docker rm docker-nginx
podman stop podman-nginx && podman rm podman-nginx
两台容器引擎都正常工作,没有冲突,说明 Docker 部署 Podman 成功。
结语
通过以上步骤,你在已有 Docker 的环境里成功部署并配置了 Podman,两者可同时拉取镜像、运行容器,互不干扰。
建议日常初学者先使用 Docker,等熟悉后再切换 Podman 体验无守护进程的优势。
如果遇到启动报错,优先检查镜像来源和端口占用。