Docker 19.03.1如何拉取OCI镜像并用于容器构建?
Docker拉取OCI格式镜像并构建的解决方案
Docker 19.03.1完全支持拉取OCI格式镜像,你遇到的报错是因为默认配置下Docker daemon未开启对OCI manifest的兼容识别,以下是具体解决方法:
方法一:修改Docker Daemon配置开启OCI支持
- 编辑Docker daemon配置文件:
- Linux/macOS:编辑
/etc/docker/daemon.json - Windows/macOS(Docker Desktop):通过设置界面找到「Daemon」选项卡,进入高级配置
- Linux/macOS:编辑
- 添加以下配置内容:
{ "experimental": true, "accept-oci-manifests": true } - 重启Docker daemon:
# Linux sudo systemctl restart docker # macOS(终端) killall Docker && open /Applications/Docker.app # Windows(PowerShell) Restart-Service Docker - 重新尝试拉取镜像:
docker pull <my-company-registry>/.../envoyproxy/envoy:1.25.1
方法二:使用Skopeo转换镜像格式
如果无法修改Docker daemon配置,可通过Skopeo将OCI格式镜像转换为Docker V2格式:
- 安装Skopeo(根据系统选择安装方式):
# Ubuntu/Debian sudo apt update && sudo apt install skopeo # CentOS/RHEL sudo yum install skopeo - 转换并拉取到本地Docker:
或者转换后推回私有仓库:skopeo copy docker://<my-company-registry>/.../envoyproxy/envoy:1.25.1 docker-daemon:<my-company-registry>/.../envoyproxy/envoy:1.25.1skopeo copy docker://<my-company-registry>/.../envoyproxy/envoy:1.25.1 docker://<my-company-registry>/.../envoyproxy/envoy:1.25.1-docker --format v2s2
方法三:启用BuildKit构建(推荐)
Docker 19.03原生支持BuildKit,它对OCI格式镜像的兼容性更好:
- 临时启用BuildKit构建新镜像:
DOCKER_BUILDKIT=1 docker build -t your-custom-envoy-image . - 永久启用BuildKit:
编辑/etc/docker/daemon.json添加:
重启Docker后,后续构建默认使用BuildKit,可直接基于OCI镜像进行构建。{ "features": { "buildkit": true } }
补充说明
Kubernetes集群能正常运行该镜像,是因为其容器运行时(如containerd)原生支持OCI格式规范;而你使用的Docker 19.03.1默认未开启OCI manifest兼容,因此需要通过上述方式调整。
内容的提问来源于stack exchange,提问作者Phil Harvey
相关产品推荐
相关产品推荐

