Docker CLI无法识别AWS CLI SSO凭证 执行docker compose up报错
问题根因
Docker ECS集成默认的凭证加载链不会直接读取aws sso login生成的本地SSO缓存凭证,只认静态IAM密钥、环境变量、实例角色这类传统凭证源,所以会报找不到有效凭证的错误。
可落地解决方法
按操作成本从低到高排序:
方法1:临时导出SSO凭证到当前终端(最快生效)
- 确认已完成SSO登录:
aws sso login --profile dev
- 导出SSO生成的临时凭证到当前终端环境,必须包含会话token,否则凭证无效:
export $(aws configure export-credentials --profile dev --format env | xargs)
- 编辑你的
docker-compose.yml,在服务的environment段补全会话token参数,否则传入容器的凭证不完整:
environment: - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN} # 新增这行 - ENABLE_SWAGGER=${ENABLE_SWAGGER:-true} - LOGGING_LEVEL=${LOGGING_LEVEL:-INFO}
- 保持在当前终端窗口直接执行
docker compose up -d即可。临时凭证默认有效期8小时,过期后重新执行登录+导出步骤即可。
方法2:配置ECS上下文绑定SSO配置文件(长期生效)
- 先升级Docker Desktop/Docker Compose到最新稳定版,旧版本Docker ECS集成没有SSO配置读取能力。
- 查看当前使用的ECS上下文名称:
docker context ls
- 给对应ECS上下文绑定你的dev SSO配置:
# 把命令里的ecs替换成你实际查到的ECS上下文名称 docker context update ecs --aws-profile dev
- 配置完成后,只要提前完成
aws sso login --profile dev登录,就可以直接执行docker compose相关命令,不需要每次手动导出环境变量。
避坑提醒
- 执行操作前先清理终端内冲突的AWS环境变量,避免凭证加载优先级混乱:
unset AWS_PROFILE AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
- 不要手动删除
~/.aws/sso/cache目录下的文件,这里存的是SSO登录的有效缓存,误删会直接导致登录态失效。 - 等功能调通后,建议删掉compose文件里手动传入AWS凭证的配置,ECS运行任务时直接绑定任务角色做权限校验即可,硬传凭证存在泄露风险,也增加后续维护成本。
内容的提问来源于stack exchange,提问作者gravitypulling
相关产品推荐
相关产品推荐

