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

创建透明Docker网络后AWS CLI无法获取凭证问题求助

问题原因分析

这个问题的核心在于Windows上Docker透明网络的特性会干扰主机对EC2实例元数据服务(IMDS)的访问。

当你创建透明网络时,Docker会在Windows主机上生成一个新的虚拟网络接口,并且可能修改系统默认路由表,把默认网关指向这个新的Docker虚拟接口。而EC2实例角色的凭证是通过169.254.169.254这个本地元数据地址获取的——一旦默认路由被修改,主机的网络请求会优先走Docker的透明网络接口,而这个接口无法访问IMDS的本地地址,最终导致AWS CLI找不到凭证来源,抛出"Unable to locate credentials"错误。

解决办法

下面是几个可行的解决方案,按推荐优先级排序:

1. 添加静态路由确保IMDS访问

直接给169.254.169.254添加一条高优先级静态路由,强制主机使用物理网卡访问元数据服务:

  • 先通过route print命令查看主机物理网卡对应的默认网关
  • 执行以下命令添加静态路由(替换<物理网卡默认网关>为实际值):
route add 169.254.169.254 mask 255.255.255.254 <物理网卡默认网关> metric 1

这条路由的优先级(metric 1)高于Docker透明网络的路由,能确保IMDS请求不会走Docker虚拟接口。

2. 创建透明网络时指定固定子网和网关

创建透明网络时,显式指定与主机物理网卡同网段的子网和网关,避免Docker自动修改默认路由:

docker network create -d transparent --subnet=192.168.1.0/24 --gateway=192.168.1.1 networkName

替换192.168.1.0/24和192.168.1.1为你主机实际的子网和网关地址。这样Docker会基于指定子网创建透明网络,不会覆盖主机的默认路由配置。

3. 临时指定AWS凭证环境变量(应急方案)

如果上面的方法暂时无法生效,可以临时通过环境变量指定凭证(不推荐长期使用,实例角色的安全性更高):

set AWS_ACCESS_KEY_ID=你的访问密钥
set AWS_SECRET_ACCESS_KEY=你的秘密密钥

执行完AWS CLI命令后记得清除这些环境变量。

验证方法

创建透明网络后,先执行ping 169.254.169.254,如果能正常连通,说明IMDS访问恢复正常;如果不通,说明路由仍有问题,修复后再测试aws s3 cp命令即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:10:32