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

Docker构建时遇NoCredentialsError:无法定位AWS凭证

问题解决指南

1. 修复zsh的bad substitution错误

当直接传递密钥值(而非引用本地环境变量)时,zsh会把${some_key}当作变量解析,若some_key不是本地已定义的环境变量,就会触发该错误。解决方式分两种场景:

  • 直接输入密钥值:用单引号包裹参数值,避免zsh解析:
    docker build . -t test:0.1 \
    --build-arg AWS_ACCESS_KEY_ID='你的访问密钥' \
    --build-arg AWS_SECRET_ACCESS_KEY='你的秘密密钥' \
    --build-arg AWS_DEFAULT_REGION='us-west-2' \
    --build-arg AWS_SECURITY_TOKEN='你的临时令牌'
    
  • 引用本地环境变量:确保本地已定义对应环境变量,直接用${变量名}引用:
    docker build . -t test:0.1 \
    --build-arg AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \
    --build-arg AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \
    --build-arg AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION} \
    --build-arg AWS_SECURITY_TOKEN=${AWS_SECURITY_TOKEN}
    

2. 让Docker构建进程读取到AWS凭证

原Dockerfile仅定义了ARG变量,但ARG仅在Docker构建的特定步骤中可用,RUN命令执行的Python进程无法直接读取ARG变量。需要把ARG转为环境变量(ENV),让boto3能通过环境变量获取凭证:

修改后的Dockerfile核心部分:

# Top level build args
ARG build_for=linux/arm64/v8
FROM --platform=$build_for python:3.11.4-bullseye as base

# Set docker basics
VOLUME /usr/app
ARG MYSQL_SECRET='mysql_secret'
# 定义ARG,允许通过build-arg传递参数
ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY
ARG AWS_DEFAULT_REGION='us-west-2'
ARG AWS_SECURITY_TOKEN

# 将ARG转为ENV,让RUN中的Python进程能读取
ENV AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
ENV AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
ENV AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION
ENV AWS_SECURITY_TOKEN=$AWS_SECURITY_TOKEN

RUN apt-get update -y
RUN apt-get install libpq-dev -y 
RUN apt-get install default-libmysqlclient-dev  -y
RUN apt-get install pkg-config -y

RUN python -m pip install boto3

COPY ./test.py /usr/app/test.py
RUN python /usr/app/test.py

3. 简化boto3凭证配置

boto3会自动优先读取环境变量中的凭证,无需额外设置AWS_CONFIG_FILE和AWS_SDK_LOAD_CONFIG,可以移除这两个环境变量配置。

额外建议

  • 避免在Docker构建过程中使用长期AWS凭证,优先用IAM角色(AWS环境内构建)或临时凭证,降低泄露风险。
  • 绝对不要在Dockerfile中硬编码凭证,始终通过--build-arg或安全凭证工具传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:23:13