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),或是缺少容器仓库的写入权限。
解决办法:
- 登录DigitalOcean控制台,进入「API」->「Tokens/Keys」页面;
- 找到对应访问令牌,或创建新令牌;
- 确保令牌权限包含
Write(具体对应registry:write权限); - 更新GitHub Secrets中的
DIGITALOCEAN_ACCESS_TOKEN为具备写入权限的令牌。
额外验证步骤:在doctl registry login后执行以下命令,确认已正确登录到DigitalOcean容器仓库:
docker info | grep "Registry"
内容的提问来源于stack exchange,提问作者gremo
相关产品推荐
相关产品推荐

