【问题标题】:NoCredentialProviders error when running "docker compose up" with AWS ECS integration使用 AWS ECS 集成运行“docker compose up”时出现 NoCredentialProviders 错误
【发布时间】:2022-02-12 08:26:19
【问题描述】:

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

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

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

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

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

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

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

还要注意 - 每次在 /etc/systemd/system/docker.service.d/ 下添加/修改文件后,我都会运行:

sudo systemctl daemon-reload
sudo systemctl restart docker

编辑:

这是 Dockerfile 之一(scraper 和 scheduler 都使用相同的 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"]

这是我的 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:

【问题讨论】:

  • 我认为添加 docker compose yaml 和你拥有的 docker 文件会很有帮助。没有它,就很难说出到底发生了什么。
  • 在上面添加了我的 Dockerfile 和 docker-compose.yml。希望这会有所帮助。

标签: amazon-web-services docker docker-compose amazon-ecs


【解决方案1】:

您是否尝试过使用 AWS 实验室提供的 Amazon ECS Local Container Endpoints tool?它允许您为您的 docker-compose 配置创建一个覆盖文件,它将模拟您将在 AWS 中使用的 ECS 端点和 IAM 角色。

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

【讨论】:

  • 嗨!我正在使用 localstack 进行本地开发 - 我的问题是尝试使用 Docker 的 ECS 集成部署到 AWS 时,我收到了我发布的错误。
最近更新 更多