Docker部署Django3.2 REST API遇botocore元数据服务404错误求助
解决Docker中Django API的botocore元数据404错误
错误原因
169.254.169.254是AWS、GCP等云平台的实例元数据服务地址,botocore在本地找不到AWS凭证配置时,会自动尝试访问该地址获取临时凭证。但本地Ubuntu的Docker环境没有这个服务,所以返回404,且DEBUG级日志会持续输出该错误。
解决方案
禁用元数据自动检测
在Docker运行时添加环境变量AWS_EC2_METADATA_DISABLED=true,可以通过以下方式设置:- 直接用
docker run命令:docker run -e AWS_EC2_METADATA_DISABLED=true [你的镜像名] - 写入
docker-compose.yml:在服务的environment字段添加AWS_EC2_METADATA_DISABLED: true
你的botocore 1.29.94版本完全支持这个环境变量,设置后botocore就不会再请求元数据地址。
- 直接用
配置AWS凭证(如果项目用到AWS服务)
如果你的Django API依赖AWS服务(比如S3存储),需要给容器提供合法的AWS凭证,避免botocore去请求元数据:- 将本地
~/.aws/credentials和~/.aws/config挂载到容器的/root/.aws/路径(或容器运行用户的对应路径) - 直接通过环境变量传入:
AWS_ACCESS_KEY_ID=你的密钥ID和AWS_SECRET_ACCESS_KEY=你的密钥
- 将本地
调整日志级别
如果不想彻底解决,只是不想看到DEBUG日志,可以在Django的settings.py里调整botocore的日志级别:import logging logging.getLogger('botocore').setLevel(logging.WARNING)这样只会输出WARNING及以上级别的日志,屏蔽DEBUG级的404报错。
内容的提问来源于stack exchange,提问作者Ananth
相关产品推荐
相关产品推荐

