TeamCity中docker buildx无法推送镜像至私有仓库(docker build正常)
Docker Buildx构建镜像成功但无法推送到私有仓库排查方案
问题背景
在TeamCity中使用docker buildx构建多平台镜像,构建日志显示成功,但私有仓库中找不到对应镜像;使用常规docker build命令则可以正常完成推送。此前该流程曾正常运行,当前无法复现。
环境信息
- 服务器架构:ARM64
- Docker版本:
$ docker version Client: Docker Engine - Community Version: 24.0.9 API version: 1.43 Go version: go1.20.13 Git commit: 2936816 Built: Thu Feb 1 00:49:14 2024 OS/Arch: linux/arm64 Context: default
- Docker Buildx版本:
$ docker buildx version github.com/docker/buildx v0.13.1 7884339
当前操作脚本
Buildx构建脚本(无报错但推送失败)
name=container-builder docker buildx ls | grep -q $name && docker buildx rm $name docker buildx create --driver-opt network=host --use --name $name docker buildx build -t registry.mydomain.com/myimage:latest --push --platform linux/amd64,linux/arm64 .
已尝试的优化脚本
docker buildx create --driver-opt network=host --use --name $name --platform linux/arm64,linux/amd64
可正常推送的常规命令
docker build -t registry.mydomain.com/myimage:latest --push .
排查思路
查看Buildx完整构建日志
添加--progress=plain参数获取详细日志,确认镜像推送步骤是否实际执行,排查隐性警告或错误:docker buildx build --progress=plain -t registry.mydomain.com/myimage:latest --push --platform linux/amd64,linux/arm64 .验证Buildx Builder网络连通性
- 检查builder网络配置:执行
docker buildx inspect container-builder,确认DriverOpts中包含network=host - 在builder容器内测试仓库连通性:
若连通失败,需检查服务器防火墙、DNS配置,或尝试改用# 容器名通常为buildx_buildkit_container-builder0 docker exec -it buildx_buildkit_container-builder0 ping registry.mydomain.com docker exec -it buildx_buildkit_container-builder0 curl -I https://registry.mydomain.com/v2/--driver-opt network=bridge并验证bridge网络访问权限。
- 检查builder网络配置:执行
检查私有仓库多平台镜像支持
部分私有仓库默认不支持OCI多平台镜像清单,使用skopeo验证推送结果:skopeo inspect docker://registry.mydomain.com/myimage:latest --raw若返回错误,需升级仓库或调整配置以支持
application/vnd.docker.distribution.manifest.list.v2+json类型清单。确保Buildx共享Docker认证信息
Buildx容器可能无法直接读取主机的Docker认证,创建builder时挂载主机配置目录:docker buildx create --driver-opt network=host --use --name $name \ --mount type=bind,source=$HOME/.docker,target=/root/.docker调整Buildx版本
当前v0.13.1可能存在已知推送bug,尝试升级或降级版本:# 升级到最新稳定版 docker buildx install检查TeamCity执行环境
- 确认TeamCity Agent用户权限与本地测试一致,可正常访问Docker守护进程
- 排查是否有环境变量(如
DOCKER_CONFIG)覆盖了Docker配置路径
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

