在docker容器中导出环境变量

时间:2018-03-27 15:23:33

标签: docker dockerfile aws-cli

我正在尝试在docker容器中运行shell脚本env_var.sh。脚本的内容如下所示。它本质上的尝试是从特定的配置文件中获取访问密钥

echo "# Environment for AWS profile dev"

echo export AWS_PROFILE=dev
echo export AWS_ACCESS_KEY_ID=(aws configure get aws_access_key_id --profile dev)
echo export AWS_SECRET_ACCESS_KEY=(aws configure get aws_secret_access_key --profile dev)
echo export AWS_DEFAULT_REGION=(aws configure get region --profile dev)

echo "dev environment variables exported"

这是我的dockerfile

FROM docker:17.04.0-ce

RUN apk update && apk add python && apk add py-pip && apk add bash

RUN pip install pip --upgrade && pip install setuptools --upgrade && pip install awscli && pip install cfdeployment==0.2.3 --extra-index-url https://dn2h7gel4xith.cloudfront.net

VOLUME /tmp/work
VOLUME /root/.aws

ADD test.sh /root/test.sh
ADD aws_env.sh /root/env_var.sh
ADD config /root/.aws/config
ADD credentials /root/.aws/credentials

RUN /root/env_var.sh


ENTRYPOINT ["/root/test.sh", "cfdeployment"]
CMD ["--version"]

我看到RUN /root/env_var.sh的输出如下。我没有看到从该角色替换的访问密钥。知道会发生什么吗

Step 9/11 : RUN /root/aws_env.sh
 ---> Running in ca46f4c516eb
# Environment for AWS profile ''
export AWS_PROFILE=dev
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
export AWS_DEFAULT_REGION=

dev environment variables exported

还是有不同的方法来设置这些env变量,这些变量使用docker run命令从他的配置文件中获取密钥?

1 个答案:

答案 0 :(得分:2)

首先,我认为env_var.sh不起作用的原因是因为它缺少美元符号,$( ) ......应该是这样的:

echo export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id --profile dev)

但无论如何,向docker容器提供环境变量的更好方法是在运行时,而不是将它们烘焙到图像中。这样,图像就会从配置中解耦...您可以更改环境变量而无需重新构建,并且您可以删除Dockerfile中您将本地aws配置复制到映像中的所有混乱。所以你会使用docker run -e选项:

docker run -e AWS_PROFILE=dev -e "AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id --profile dev)" my-image

请参阅https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file