导出docker容器内的环境变量

导出docker容器内的环境变量,docker,dockerfile,aws-cli,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_KE

我试图在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"
这是我的文件

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

或者有没有其他方法可以使用
docker run
命令设置这些从配置文件中提取密钥的env变量?

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

echo export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id --profile dev)
但不管怎样,向docker容器提供环境变量的更好方法是在运行时,而不是将它们烘焙到映像中。这样,映像将从配置中分离。。。您可以通过重新构建来更改环境变量,并且可以删除Dockerfile中的所有混乱,在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