Docker Compose推送DigitalOcean镜像仓库报unexpected end of JSON input错误
问题根因定位
你的容器镜像命名不符合DigitalOcean容器镜像仓库(DOCR)的规范,是当前报错的直接原因:
DOCR要求的镜像命名格式为:registry.digitalocean.com/<你的仓库名称>/<自定义镜像名>:<标签>
而你当前配置里所有DOCR镜像都写成了 registry.digitalocean.com/pythonist-do:web 这种格式,仓库名pythonist-do和镜像名web之间错误使用了冒号而非斜杠,导致推送请求被DOCR识别为非法请求,返回400错误。
修复步骤
- 修正
docker-compose.staging.yml中的镜像地址
把所有服务的image字段里仓库名后的冒号替换为斜杠,可自行指定镜像标签,未指定时默认使用latest:
# 原错误写法 image: registry.digitalocean.com/pythonist-do:web image: registry.digitalocean.com/pythonist-do:nginx-proxy # 修正后写法 image: registry.digitalocean.com/pythonist-do/web:latest image: registry.digitalocean.com/pythonist-do/nginx-proxy:latest
同步doctl凭证到Docker本地
即使doctl已经配置了权限,也需要执行命令完成Docker对DOCR的登录认证:doctl registry login
执行后提示登录成功即可。重新构建并推送镜像
docker-compose -f docker-compose.staging.yml build docker-compose -f docker-compose.staging.yml push
可选排查点
如果修改后仍报错,可按以下顺序排查:
- 确认你在DO后台创建的容器仓库名称确实为
pythonist-do,大小写、拼写完全一致 - 确认你的DO账户容器镜像仓库服务已正常激活,无欠费、权限受限等异常
- 清理本地旧的错误命名的镜像后再重新构建推送,避免缓存影响
内容的提问来源于stack exchange,提问作者Abdul Rehman
相关产品推荐
相关产品推荐

