通过 AWS ECS 集成运行“docker compose up”时出现 NoCredentialProviders 错误

kpe*_*nka 8 amazon-web-services amazon-ecs docker docker-compose

当我尝试运行docker compose up使用 Docker 的 ECS 集成将基础设施部署到 AWS 时,出现以下错误。请注意,我在 Pop!_OS 21.10 上运行它,它基于 Ubuntu。

NoCredentialProviders: no valid providers in chain. Deprecated. For verbose messaging see aws.Config.CredentialsChainVerboseErrors

基于对 SO 和其他网站的详尽搜索,我尝试过的事情:

  • 已验证我的格式正确,~/.aws/config文件~/.aws/credentials格式正确,位于正确的位置,并且具有正确的权限
  • 已验证 aws cli 工作正常
  • 验证AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,AWS_REGION均设置正确
  • 尝试将配置和凭据复制到/root/.aws
  • 尝试在 root 用户环境中设置AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,AWS_REGION
  • 创建/etc/systemd/system/docker.service.d/aws-credentials.conf并填充它:
[Service]
Environment="AWS_ACCESS_KEY_ID=********************"
Environment="AWS_SECRET_ACCESS_KEY=****************************************"
Run Code Online (Sandbox Code Playgroud)
  • Ran docker -l debug compose up(它提供的唯一额外信息是DEBUG deploying on AWS with region="us-east-1"

我已经没有选择了。如果有人有任何其他想法可以尝试,我很想听听。谢谢!

更新:我现在也尝试了以下方法,但没有成功:

  • 尝试设置Environment="AWS_SHARED_CREDENTIALS_FILE=/home/kespan/.aws/credentials
  • 尝试Environment="AWS_SHARED_CREDENTIALS_FILE=/home/kespan/.aws/credentials设置/etc/systemd/system/docker.service.d/override.conf
  • 记住我的 IAM 账户启用了 MFA 后,生成了一个令牌并添加Environment="AWS_SESSION_TOKEN=..."override.conf

另请注意 - 每次我/etc/systemd/system/docker.service.d/在运行下添加/修改文件后:

sudo systemctl daemon-reload
sudo systemctl restart docker
Run Code Online (Sandbox Code Playgroud)

编辑:

这是 Dockerfile 之一(抓取器和调度程序都使用相同的 Dockerfile):

FROM denoland/deno:alpine
WORKDIR /app
USER deno
COPY deps.ts .
RUN deno cache --unstable --no-check deps.ts
COPY . .
RUN deno cache --unstable --no-check mod.ts
RUN mkdir -p /var/tmp/log
CMD ["run", "--unstable", "--allow-all", "--no-check", "mod.ts"]
Run Code Online (Sandbox Code Playgroud)

这是我的 docker-compose (一些内容已编辑):

version: '3'
services:
  grafana:
    container_name: grafana
    image: grafana/grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana:/var/lib/grafana
    deploy:
      replicas: 1
  scheduler:
    image: scheduler
    x-aws-pull-credentials: "arn..."
    container_name: scheduler
    environment:
      DB_CONNECTION_STRING: "postgres://..."
      SQS_URL: "..."
      SQS_REGION: "us-east-1"
      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
    deploy:
      replicas: 1
  scraper:
    image: scraper
    x-aws-pull-credentials: "arn..."
    container_name: scraper
    environment:
      DB_CONNECTION_STRING: "postgres://..."
      SQS_URL: "..."
      SQS_REGION: "us-east-1"
      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
    deploy:
      replicas: 1
volumes:
  grafana:
Run Code Online (Sandbox Code Playgroud)

Tre*_*ley 0

您是否尝试过使用AWS 实验室提供的Amazon ECS 本地容器终端节点工具?它允许您为 docker-compose 配置创建覆盖文件,并且它将模拟您将在 AWS 中使用的 ECS 端点和 IAM 角色。

这是使用您工作站上的本地 AWS 凭证完成的。更多信息请访问AWS 博客