在 docker 容器中获取弹性 beanstalk 环境变量

Posted

技术标签:

【中文标题】在 docker 容器中获取弹性 beanstalk 环境变量【英文标题】:Get elastic beanstalk environment variables in docker container 【发布时间】:2017-07-16 18:10:40 【问题描述】:

所以,我尽量不在 dockerfile 上放置敏感信息。一种合乎逻辑的方法是将凭据作为 ENV 变量放入 ebs 配置(GUI)中。但是, docker build 似乎无法访问 ENV 变量。有什么想法吗?

FROM jupyter/scipy-notebook

USER root

ARG AWS_ACCESS_KEY_ID
RUN echo $AWS_ACCESS_KEY_ID

【问题讨论】:

这些环境变量应该只在运行时使用。您可以创建一个简单的 shell 脚本以在创建 Docker 容器时运行并在那里访问这些变量 【参考方案1】:

我假设对于每个部署,您都会创建一个新的 Dockerrun.aws.json 文件,并为该部署使用正确的 docker 映像标签。在部署阶段,您可以注入环境值,然后 EB 代理将在 docker run 命令中使用这些值。所以你的 docker 容器现在可以访问这些环境变量了。

【讨论】:

你能提供一个定义了变量的文件的例子吗?这与将 ENV 值硬编码到 Dockerfile 中有何不同? 在上面的链接中,您可以看到如何在 JSON 文件中注入环境。如果您将环境变量嵌入到您的 docker 镜像中,那么您的镜像将与您的环境紧密耦合。如果您通过 Dockerrun.aws.json 注入它们,那么您的图像将能够在任何环境中使用。还要记住,通过 Dockerfile 注入敏感信息并不是最好的主意,因为检查图像和查看值非常容易。例如,任何可以提取您的图像的人也可以看到您的凭据。 我完全在寻找这个,我真的不想在 Docker 文件中添加秘密。但是,我想念如何在部署阶段注入环境值。你能帮我解决这个问题吗?【参考方案2】:

放置敏感信息(供 Dockerfile 使用)可以是为了允许映像的特定步骤运行(构建时间),也可以是为了让生成的映像在运行时保留该机密。 对于运行时,如果你可以在 swarm 模式配置中使用最新的 docker 1.13,你可以manage secrets that way

但第一种情况(构建时间)通常用于将凭据传递给http_proxy,这可以通过--build-arg 完成:

 docker build --build-arg HTTP_PROXY=http://...

此标志允许您传递像 Dockerfile 的 RUN 指令中的常规环境变量一样访问的构建时变量。 此外,这些值不会像 ENV 值那样保留在中间或最终图像中。

在这种情况下,你不会使用ENV、but ARG

ARG <name>[=<default value>]

ARG 指令定义了一个变量,用户可以在构建时通过 docker build 命令使用--build-arg &lt;varname&gt;=&lt;value&gt; 标志将其传递给构建器

【讨论】:

那么,在弹性beantalk的上下文中,如何调用docker build? @WilliamFalcon docker build --build-arg AWS_ACCESS_KEY_ID=xxx 但是这个命令是从哪里调用的呢? .eb 扩展?随机文件?码头文件? ebs 配置图形用户界面? (另外,如果在 .ebextensions 或 dockerfile 上,它会破坏不提交密钥或凭据的目的) @WilliamFalcon 您可以在本地构建图像并将其上传到 ECR,如aws.amazon.com/blogs/compute/…中所述 遗憾的是,目前您无法将 ARG 输入基于 EB 的 Dockerfile。或者看起来是这样。他们应该做的是将所有定义的环境变量自动传递给docker build,但他们没有。或者看起来

以上是关于在 docker 容器中获取弹性 beanstalk 环境变量的主要内容,如果未能解决你的问题,请参考以下文章

弹性beantalk反应应用程序docker容器启动问题

如何在弹性beantalk docker json中定义多个任务

具有 Auto Scaling 与弹性容器服务 (ECS) 的 AWS EC2 - Docker

容器技术Docker K8s 32 容器服务ACK基础与进阶-弹性伸缩

容器技术Docker K8s 31 容器服务ACK基础与进阶-弹性伸缩

容器技术Docker K8s 30 容器服务ACK基础与进阶-弹性伸缩