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

如何发送Portainer Webhook重建容器 解决私有仓库认证报错

问题根因

别绕,这个报错本质是你加认证的地方完全错了。
报no basic auth credentials是跑服务的Docker节点拉私有镜像的时候没拿到仓库凭证,和你给Webhook请求加什么认证头半毛钱关系没有——你在Postman给发往Portainer的请求塞Registry的账号密码,Portainer根本不会把这个凭证传给底层Docker daemon,纯纯做无用功。

解决步骤
  • 先检查Portainer的私有仓库配置
    进后台Registries菜单,找到你加的registry.mydomain条目,确认填的仓库用户名、密码是对的,还要把所有跑业务容器的Docker节点都勾上这个仓库的访问权限,存好配置。
  • 给对应服务绑定拉取凭证
    找到你开了Webhook的my-gateway服务/容器,进编辑页:
    • Swarm模式的Service:找到Registry authentication下拉框,直接选你刚才配置好的registry.mydomain对应的凭证,别留空选默认项
    • 单机部署的容器:在镜像拉取配置区,同样选中对应私有仓库的认证凭证
      配完手动点一次更新服务,确认这次能正常拉到镜像,不抛认证错误,这步过了Webhook才能正常用。
  • 正确构造Webhook请求
    Portainer v2.13.1的Webhook本身URL里带的随机串就是鉴权凭证,不需要额外加任何请求头、不需要带任何请求体,不管用curl还是Postman,直接发POST请求到生成的Webhook地址就行。
    举个curl调用的例子:
    curl -X POST "https://你的Portainer访问地址/api/webhooks/3fa85f64-5717-4562-b3fc-2c963f66afa6"
    
    用Postman的话就选POST方法,URL填对,Body选none,Authorization选No Auth,直接发就成。
避坑提醒
  • 别再给Webhook请求加Registry的Basic Auth了:请求是打给Portainer的,不是打给镜像仓库的,加了Portainer也不认,没用
  • 多节点Swarm集群的话,要确认所有可能调度到这个服务的节点,都在私有仓库的授权访问列表里,不然服务飘到没权限的节点照样拉镜像失败
  • 如果你之前是在宿主机手动docker login过私有仓库,记得检查下/root/.docker/config.json里的凭证有没有过期,Portainer没单独配仓库凭证的时候会默认读宿主机的这个配置,过期了也会报同样的错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:39:14