在 Podman 中,可以使用 podman push 命令将本地镜像推送到远程仓库或者私库中,实现镜像的共享、分发、版本管理和跨环境部署。
为什么要将镜像推送到仓库?主要原因如下:
(1) 跨环境复用:本地构建的镜像可推送到仓库,在服务器、测试环境、生产环境等不同机器上直接拉取使用,无需重复构建。
(2)团队协作共享:团队成员可通过仓库获取统一版本的镜像,避免因本地环境差异导致的“我这能跑”问题。
(3)版本管控:仓库会记录镜像的不同标签(如 v1.0、v2.0),可回溯历史版本,便于迭代和回滚。
(4)支持部署自动化:CI/CD 流水线(如 Jenkins、GitLab CI)可直接从仓库拉取镜像,实现自动化测试、构建和部署。
(5)节省本地资源:无需在多台机器上重复存储镜像文件,仓库集中托管,降低存储成本。
podman push 的基本格式如下:
podman push [选项] 镜像名称[:标签|@摘要] [目标位置]
参数说明:
镜像名称:可以是本地镜像名、镜像 ID,或带仓库地址的完整镜像名。
目标位置:通常是仓库地址 + 镜像名 + 标签(若省略,会沿用本地镜像的标签)。
常用选项:
--tls-verify=true|false 控制是否验证仓库的 TLS 证书。推送至使用自签名证书或 HTTP 协议的私有仓库时,需设为 false。例如:podman push --tls-verify=false your-registry:5000/myapp:latest
--format=FORMAT 指定镜像传输格式,常用值为 docker(默认)或 oci。例如:podman push --format=oci myapp:latest docker.io/yourname/myapp:latest
--remove-signatures 推送时移除镜像的签名信息(若镜像已签名),例如:podman push --remove-signatures myapp:latest quay.io/yourname/myapp:latest
--quiet, -q 静默模式,仅输出必要信息,减少日志干扰。
--authfile=PATH 指定身份验证文件路径(默认路径为 $XDG_RUNTIME_DIR/containers/auth.json),例如:podman push --authfile=/path/to/my/auth.json myapp:latest docker.io/yourname/myapp:latest
--creds=USERNAME:PASSWORD 直接指定仓库的用户名和密码(不推荐在命令行使用,避免密码泄露),例如:podman push --creds=myuser:mypass myapp:latest docker.io/yourname/myapp:latest
点击查看 podman push 命令手册。
下面演示将使用腾讯云免费的容器镜像服务 TCR(https://console.cloud.tencent.com/tcr/repository),如下图:

个人账户,免费拥有 10 个命名空间,500 个仓库数量的额度。命名空间可以简单理解为目录/分类,仓库这是我们具体的镜像,如 hxstrive.com 命名空间下面存在 mysql、redis、mongodb 三个仓库,而 mysql、redis、mongodb 又存在多个版本,如下图:
hxstrive.com ├── mysql │ ├── 5.7 │ └── 8.0 ├── mongodb │ └── latest └── redis ├── 5.0 ├── 7.0 └── latest
点击左边菜单栏“镜像仓库”,然后创建一个名为 myapp 的镜像仓库,如下图:

点击 myapp 镜像仓库的“快捷指令”按钮显示 docker 的操作指令,podman 类似,只需将 docker 改为 podman 即可。如下图:

下面将根据上图的内容进行操作。
登录到目标镜像仓库,例如:
C:\Users\Administrator> podman login ccr.ccs.tencentyun.com --username=100009324115 Password: # 在这里输入密码,输入密码没有反馈字符,为了安全 Login Succeeded!
上述提示,登录成功了。
在推送之前,你需要确保镜像的标签符合仓库的命名规范,格式通常为:
[仓库地址]/[用户名]/[镜像名]:[标签]
下面是腾讯给出的格式:
podman tag [imageId] ccr.ccs.tencentyun.com/hxstrive.com/myapp:[tag]
说明:将 [imageId] 替换成你自己的镜像 ID 或名称,[tag] 替换为你的版本信息,如 v1.0 等。
例如:
# 查看本地的镜像 C:\Users\Administrator> podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/my-nginx latest 60adc2e137e7 29 hours ago 155 MB docker.io/library/nginx latest 60adc2e137e7 29 hours ago 155 MB # 为镜像 nginx 打标签 C:\Users\Administrator> podman tag nginx ccr.ccs.tencentyun.com/hxstrive.com/myapp:v1.0 # 查看达标后的镜像 C:\Users\Administrator> podman images REPOSITORY TAG IMAGE ID CREATED SIZE ccr.ccs.tencentyun.com/hxstrive.com/myapp v1.0 60adc2e137e7 29 hours ago 155 MB localhost/my-nginx latest 60adc2e137e7 29 hours ago 155 MB docker.io/library/nginx latest 60adc2e137e7 29 hours ago 155 MB
使用 podman push 命令推送标记好的镜像:
C:\Users\Administrator> podman push ccr.ccs.tencentyun.com/hxstrive.com/myapp:v1.0 Getting image source signatures Copying blob sha256:388bb4cadb9eb18529d3f466855a783f38c821571bc180fec9d0663fef1d0322 Copying blob sha256:008ba900efa19180f53a0ed13fc6feb7d2d34bad25a839702024f87c5122568a Copying blob sha256:fe0771a36433cf0ef9f598e1f0b526520fa60c732d969e67bc6dd38f01bebf40 Copying blob sha256:5f0d4d15245b8979efd5be5e1726e44dd6461c32c2fa193b15228e591f1d2442 Copying blob sha256:70a290c5e58b68f39496ab93a62f21b8b2ca0502e97905131838de1b39a37cbb Copying blob sha256:1e79db1a7c1e2dc46e0cb975b22d67695877d42318a3598d01f322df3078c43d Copying blob sha256:38d44e06fd0163071bcf2eeff92083e9420f4fb17c32fb5c4af71b75e0e91eaa Copying config sha256:60adc2e137e757418d4d771822fa3b3f5d3b4ad58ef2385d200c9ee78375b6d5 Writing manifest to image destination
再回到腾讯 TCR 镜像仓库界面,点击 myapp 仓库查看版本信息,如下图:

上图多了一个 v1.0 的镜像版本信息,到这里推送就成功了。
注意,完成推送后,可以选择登出,避免被人利用,任意推送镜像。
C:\Users\Administrator> podman logout ccr.ccs.tencentyun.com Removed login credentials for ccr.ccs.tencentyun.com
遵循以上步骤,你就可以顺利地将 Podman 管理的镜像推送到任何兼容的容器仓库了。