如何使用docker buildx构建镜像并推送到本地自定义registry容器
Docker Buildx多架构镜像推送至自定义私有Registry方案
前置准备
- 提前部署好你的私有Registry,完成本地Docker客户端的登录认证:
docker login <你的私有Registry地址> # 示例:docker login registry.mycompany.com:5000 - 确保你已经创建了支持多架构构建的buildx实例:
# 创建多架构构建器并启用 docker buildx create --name multiarch --use # 初始化构建器环境 docker buildx inspect multiarch --bootstrap
核心操作方法
docker buildx的--push参数本身没有绑定Docker Hub,推送目标完全由你构建时指定的镜像标签决定,只需要给镜像打带私有Registry地址前缀的标签即可:
- 标签格式规则:
<私有Registry地址>/<项目/命名空间>/<镜像名>:<版本标签> - 完整构建命令示例:
docker buildx build \ --platform linux/amd64,linux/arm64,linux/arm/v7 \ -t registry.mycompany.com:5000/apps/demo-service:v1.2.0 \ --push \ .
执行上述命令后,buildx会自动将所有指定架构的镜像、以及统一的多架构镜像清单全部推送到你指定的私有Registry,不会产生任何到Docker Hub的请求。
常见问题处理
- 自签名证书Registry推送报错:将Registry的根证书放到本地Docker证书目录
/etc/docker/certs.d/<你的私有Registry地址>/ca.crt,重启Docker服务后重试即可 - 权限不足报错:确认登录Registry的账号对标签中对应的项目/命名空间有读写权限
- 需要同时导出单架构镜像到本地:多架构镜像清单无法直接存入本地默认镜像存储,如需导出单架构镜像到本地,去掉
--push参数改为--load,同时只指定单个架构即可:docker buildx build \ --platform linux/amd64 \ -t registry.mycompany.com:5000/apps/demo-service:v1.2.0 \ --load \ .
内容的提问来源于stack exchange,提问作者threehundredfortyfive
相关产品推荐
相关产品推荐

