我正在尝试在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
命令从他的配置文件中获取密钥?
答案 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