【发布时间】: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_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=****************************************"
- 跑
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