导出docker容器内的环境变量

vkr*_*vkr 6 docker aws-cli dockerfile

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

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"
Run Code Online (Sandbox Code Playgroud)

这是我的 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 Code Online (Sandbox Code Playgroud)

我看到的输出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
Run Code Online (Sandbox Code Playgroud)

或者是否有不同的方法来设置这些环境变量,使用命令从配置文件中获取密钥docker run

小智 7

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

echo export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id --profile dev)
Run Code Online (Sandbox Code Playgroud)

但无论如何,向 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
Run Code Online (Sandbox Code Playgroud)

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


小智 7

您可以ENVdockerfile中使用来创建这些变量,并单独设置它们,例如:

ENV AWS_PROFILE=dev
Run Code Online (Sandbox Code Playgroud)

还有另一个名为 的命令ARG,您可以使用set variables该命令仅在构建阶段可用。