我正试图从AWS那里获得这个秘密,如下所示:

import boto3
import os

mysql_secret = os.environ['MYSQL_SECRET']

def get_secret():

    region_name = "us-west-2"

    # Create a Secrets Manager client
    session = boto3.session.Session()
    client = session.client(
        service_name='secretsmanager',
        region_name=region_name
    )

    get_secret_value_response = client.get_secret_value(SecretId=mysql_secret)

    # Decrypts secret using the associated KMS key.
    secret = get_secret_value_response['SecretString']
    return secret

secret = get_secret()

使用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 AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY='some_key'
ARG AWS_DEFAULT_REGION='us-west-2'
ARG AWS_SECURITY_TOKEN='some_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

我四处张望了一会儿,试着加了

ENV AWS_CONFIG_FILE=/root/.aws/config
ENV AWS_SDK_LOAD_CONFIG=1

添加到Docker文件

我try 直接传递凭据,如下所示

docker build . -t test:0.1 \
--build-arg AWS_ACCESS_KEY_ID=${access_key_here} \
--build-arg AWS_SECRET_ACCESS_KEY=${secret_key_here} \
--build-arg AWS_DEFAULT_REGION=${us-west-2} \
--build-arg AWS_SECURITY_TOKEN=${token_here}

似乎什么都不管用.

最新情况: 我补充道

ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY='some_key'
ARG AWS_DEFAULT_REGION='us-west-2'
ARG AWS_SECURITY_TOKEN='some_token'

按照Vasyl Herman的建议,硬编码了4个参数中的3个,省略了AWS_ACCESS_KEY_ID. 然后我试着 run docker build . -t test:0.1 --build-arg AWS_ACCESS_KEY_ID=${some_key},但仍收到相同的错误.即使它在访问密钥也被硬编码的情况下工作.

如果我硬编码访问密钥,但遗漏了密钥,则在运行时会收到不同的错误 docker build . -t test:0.1 --build-arg AWS_SECRET_ACCESS_KEY=${some_key}

: zsh: bad substitution.

推荐答案

为AWS密钥添加ARG指令,如下所示:

# Example. Dockerfile with defined ARG directives

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

ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY
ARG AWS_DEFAULT_REGION=us-west-2
ARG AWS_SECURITY_TOKEN

# Set docker basics
VOLUME /usr/app
ARG MYSQL_SECRET='mysql_secret'

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

现在,您应该能够设置或覆盖运行带有--build-arg个参数的docker构建命令的预定义ARG指令值.

拜托,试试看.它必须起作用.

Important note:建议在运行时获取机密,而不是在构建时获取.无论你在这里的目标是什么,都要记住.

Python相关问答推荐

使用Python Great Expectations和python-oracledb

在两极中实施频率编码

如何在Python中使用ijson解析SON期间检索文件位置?

在Python中为变量的缺失值创建虚拟值

有条件地采样我的大型DF的最有效方法

具有症状的分段函数:如何仅针对某些输入值定义函数?

Class_weight参数不影响RandomForestClassifier不平衡数据集中的结果

连接两个具有不同标题的收件箱

如何标记Spacy中不包含特定符号的单词?

从dict的列中分钟

用Python解密Java加密文件

数据抓取失败:寻求帮助

如何在Python脚本中附加一个Google tab(已经打开)

Pandas:将多级列名改为一级

使用Python更新字典中的值

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

Matplotlib中的字体权重

为什么'if x is None:pass'比'x is None'单独使用更快?

polars:有效的方法来应用函数过滤列的字符串

在二维NumPy数组中,如何 Select 内部数组的第一个和第二个元素?这可以通过索引来实现吗?