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

使用Watchtower更新Docker容器遇“No basic auth credentials”错误求助

解决AWS ECR镜像自动更新的Watchtower认证问题

问题背景

我有一台运行Ubuntu 22.04.1 LTS(Jammy Jellyfish)的EC2实例,需要在AWS ECR有新镜像时自动拉取、替换并重启Docker容器。使用Watchtower配置后,首次能正常拉取并运行容器,但后续检查镜像仓库时返回错误No basic auth credentials,请求解决办法或替代工具。

环境配置

Dockerfile

FROM ubuntu
RUN echo "Hi there!"
CMD sleep 2500

docker-compose.yml(******为AWS账号ID)

version: "3"
services:
  ubuntu:
    image: ******.dkr.ecr.us-east-1.amazonaws.com/mytest:latest
    container_name: mytest

  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - .docker/config.json:/home/administrator/.docker/config.json
      - helper:/go/bin
    environment:
      - HOME=/
      - PATH=$PATH:/go/bin
      - AWS_REGION=us-east-1
    command: ['mytest','--schedule','30 * * * * *']
volumes:
  helper:
    external: true

~/.docker/config.json

{
        "credsStore" : "ecr-login",
        "HttpHeaders" : {
        "User-Agent" : "Docker-Client/19.03.1 (XXXXXX)"
        },
        "auths": {
                "******.dkr.ecr.us-east-1.amazonaws.com": {
                        "auth": "Lot of random letters"
                }
        },
        "credHelpers": {
        "******.dkr.ecr.us-east-1.amazonaws.com" : "ecr-login"
        }
}

已安装工具

已将docker-credential-ecr-login放置在/go/bin/目录:

$ ls /go/bin/
docker-credential-ecr-login

错误日志

执行docker-compose up -d能正常启动容器,但Watchtower后续检查时出现认证错误:

$ docker logs 27238edee0b1
time="2022-12-24T03:44:02Z" level=info msg="Watchtower 1.5.1"
time="2022-12-24T03:44:02Z" level=info msg="Using no notifications"
time="2022-12-24T03:44:02Z" level=info msg="Only checking containers which name matches \"mytest\""
time="2022-12-24T03:44:02Z" level=info msg="Scheduling first run: 2022-12-24 03:44:30 +0000 UTC"
time="2022-12-24T03:44:02Z" level=info msg="Note that the first check will be performed in 27 seconds"
time="2022-12-24T03:44:30Z" level=info msg="Unable to update container \"/mytest\": Error response from daemon: Head \"https://******.dkr.ecr.us-east-1.amazonaws.com/v2/mytest/manifests/latest\": no basic auth credentials. Proceeding to next."
time="2022-12-24T03:44:30Z" level=info msg="Session done" Failed=0 Scanned=1 Updated=0 notify=no

已尝试的解决方法

  • 遵循Watchtower私有仓库配置指引
  • 搜索并尝试相关社区解决方案
  • 将AWS CLI更新至最新版本aws-cli/2.9.9
  • 修改~/.docker/config.json为以下简化格式:
    {
        "credsStore": "ecr-login"
    }
    
    或:
    {
        "auths": {
            "000000000000.dkr.ecr.us-east-1.amazonaws.com": {}
        },
        "credsStore": "ecr-login"
    }
    
  • 删除~/.docker/config.json后重新执行ECR登录命令:
    aws ecr get-login-password --region eu-central-1 | docker login --username AWS --password-stdin ******.dkr.ecr.eu-central-1.amazonaws.com
    
  • 尝试使用Watchtower的--interval和--schedule两种调度选项

解决方案

方案1:修复Watchtower的权限与配置映射问题

  1. 修正config.json挂载路径:Watchtower容器内默认用户的Docker配置路径为/root/.docker/config.json,而非/home/administrator/.docker/config.json。修改docker-compose.yml中watchtower的volume映射:

    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ~/.docker/config.json:/root/.docker/config.json
      - /go/bin/docker-credential-ecr-login:/usr/local/bin/docker-credential-ecr-login
    

    直接挂载单个二进制文件,避免外部卷带来的路径问题。

  2. 简化config.json配置:移除冗余的auths字段(ECR令牌会自动过期,无需硬编码),保留核心配置:

    {
      "credsStore": "ecr-login",
      "credHelpers": {
        "******.dkr.ecr.us-east-1.amazonaws.com": "ecr-login"
      }
    }
    
  3. 确保凭证助手可执行:在宿主机上给docker-credential-ecr-login添加可执行权限:

    chmod +x /go/bin/docker-credential-ecr-login
    
  4. 传递AWS凭证:如果EC2实例未附加IAM角色,需在watchtower的environment中添加AWS密钥(推荐优先给EC2实例附加具有AmazonEC2ContainerRegistryReadOnly权限的IAM角色,无需手动配置密钥):

    environment:
      - AWS_REGION=us-east-1
      - AWS_ACCESS_KEY_ID=your-access-key
      - AWS_SECRET_ACCESS_KEY=your-secret-key
    

方案2:替代工具推荐

如果Watchtower配置仍有问题,可尝试以下工具:

  • Docker Compose Watch:Docker官方工具,支持镜像更新检测与自动重启,适合简单场景。
  • Renovate:专注依赖更新,支持Docker镜像,可配置自动拉取ECR新镜像并触发部署,适合CI/CD集成场景。
  • AWS原生方案:通过CodePipeline监听ECR镜像变更,自动更新ECS服务(若使用AWS ECS),全托管无需额外维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:31:16