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)
小智 7
您可以ENV在dockerfile中使用来创建这些变量,并单独设置它们,例如:
ENV AWS_PROFILE=dev
Run Code Online (Sandbox Code Playgroud)
还有另一个名为 的命令ARG,您可以使用set variables该命令仅在构建阶段可用。
| 归档时间: |
|
| 查看次数: |
16986 次 |
| 最近记录: |