跳到主要内容

使用 Podman 构建镜像

概述

Podman 是一个类似 docker 的工具,可以运行容器,也可以构建镜像,甚至可以像 docker 一样支持构建多平台镜像。如今 Docker Desktop 已经宣布收费,可以考虑使用 Podman 来替代。

安装

参考 官方安装文档,我使用的是 Mac,安装很简单:

brew install podman

由于 podman 是基于 Linux 的,安装在 Mac 需要先启动它的虚拟机:

podman machine init
podman machine start

最后检查下是否 ok:

podman info

Podman 构建镜像的背后

Podman 构建镜像在背后实际是利用了 Buildah 这个工具去构建,只是封装了一层,更容易使用了。

Podman 构建镜像的方法

podman build 基本兼容 docker build,所以你可以像使用 docker 一样去使用 podman 构建镜像。

FAQ

未启动虚拟机导致报错

执行 podman 命令是,遇到 connect: no such file or directory 的报错:

$ podman build --platform=linux/amd64 . -t imroc/crontab:centos -f centos.Dockerfile
Cannot connect to Podman. Please verify your connection to the Linux system using `podman system connection list`, or try `podman machine init` and `podman machine start` to manage a new Linux VM
Error: unable to connect to Podman socket: Get "http://d/v4.0.2/libpod/_ping": dial unix ///var/folders/91/dsfxsd7j28z2mxl7vm91mjg40000gn/T/podman-run--1/podman/podman.sock: connect: no such file or directory

通常是因为在非 Linux 的系统上,没有启动 podman linux 虚拟机导致的,启动下就可以了。

代理导致拉取镜像失败

使用 podman 构建镜像或直接拉取镜像的过程中,遇到这种报错:

Error: error creating build container: initializing source docker://centos:8: pinging container registry registry-1.docker.io: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: dial tcp 127.0.0.1:12639: connect: connection refused

通常是因为启动 podman 虚拟机时,终端上有 HTTP 代理的环境变量,可以销毁虚拟机,重新启动,启动前确保当前终端没有 HTTP 代理的环境变量。

参考资料