You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Action中docker compose build --push无推送且无报错问题排查

问题分析与解决方案

方案1:无报错但未推送镜像的原因

你启用了docker/setup-buildx-action来使用Buildx,但docker compose build --push在该环境下的行为和本地执行不同:

  • Buildx默认采用docker-container驱动构建镜像,构建完成后会将镜像导入到本地Docker守护进程(日志里的#32 importing to docker就是直接证据),而非直接推送到远程仓库。
  • 本地执行时你大概率未启用Buildx,或者compose直接使用默认Docker驱动,因此--push能正常触发推送流程。

解决办法:

  • 方法一:在docker-compose.yml中为每个服务配置x-bake字段,改用docker buildx bake命令替代docker compose build --push,借助Buildx的原生推送能力完成镜像推送。
  • 方法二:移除Set up Docker Buildx步骤,让compose使用默认Docker驱动,这样docker compose build --push就能和本地执行时一样正常推送。

方案2:令牌权限不足的原因

DigitalOcean访问令牌需要具备**registry:write权限**才能推送镜像,你的DIGITALOCEAN_ACCESS_TOKEN可能仅配置了只读权限(如仅registry:read),或是缺少容器仓库的写入权限。

解决办法:

  1. 登录DigitalOcean控制台,进入「API」->「Tokens/Keys」页面;
  2. 找到对应访问令牌,或创建新令牌;
  3. 确保令牌权限包含Write(具体对应registry:write权限);
  4. 更新GitHub Secrets中的DIGITALOCEAN_ACCESS_TOKEN为具备写入权限的令牌。

额外验证步骤:在doctl registry login后执行以下命令,确认已正确登录到DigitalOcean容器仓库:

docker info | grep "Registry"

内容的提问来源于stack exchange,提问作者gremo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:00:27