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

Docker容器挂载AWS CLI凭证后未被识别导致API调用失败如何解决

问题原因

AWS CLI 默认会读取运行用户家目录下的.aws文件夹内的凭证和配置文件,你容器内使用root用户运行进程,root的家目录为/root,但你将宿主机的.aws目录挂载到了容器的根路径/.aws下,不在CLI的默认查找路径内,因此无法读取到有效凭证。
另外你当前的docker run命令参数顺序错误,镜像名需要放在所有启动参数之后,传入容器的参数放在镜像名之后,否则会出现镜像识别错误、参数传递错位的问题。

解决方案

以下方案任选其一即可:

方案1:调整挂载路径(最简便)

将.aws目录直接挂载到root用户的家目录下,匹配AWS CLI的默认查找规则,修改docker run的挂载参数:

# 原挂载参数 -v $PWD/.aws:/.aws:ro 调整为
-v $PWD/.aws:/root/.aws:ro

调整后的完整运行命令示例:

docker run -d -v $PWD/.aws:/root/.aws:ro -e XDG_CACHE_HOME=/tmp/go/.cache test-image arn:aws:iam::829327394277:role/myjenkins

方案2:指定AWS CLI凭证路径环境变量

如果需要保留挂载到根目录的逻辑,可在启动容器时添加AWS CLI的配置路径环境变量,告知CLI凭证的实际存放位置:

docker run -d -v $PWD/.aws:/.aws:ro \
  -e XDG_CACHE_HOME=/tmp/go/.cache \
  -e AWS_CONFIG_FILE=/.aws/config \
  -e AWS_SHARED_CREDENTIALS_FILE=/.aws/credentials \
  test-image arn:aws:iam::829327394277:role/myjenkins

方案3:在脚本内指定凭证路径

也可以直接在assume-role.sh脚本开头添加环境变量声明,无需修改启动命令:

#!/usr/bin/env bash
# 新增以下两行
export AWS_CONFIG_FILE="/.aws/config"
export AWS_SHARED_CREDENTIALS_FILE="/.aws/credentials"

# 原有脚本内容...

修改完成后重新构建镜像运行即可,STS AssumeRole调用成功后生成的临时凭证会自动覆盖原有凭证,后续的AWS API调用也会正常执行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:18:03