当前位置: 首页 > 面试题库 >

在构建时在Docker中创建动态环境变量

鞠安民
2023-03-14
问题内容

我的特定用例是,我想组织一些有关容器在其上运行的EC2实例的数据,并使我可用作环境变量。构建容器时,我想这样做。

我希望能够ENV VAR_NAME $(./script/that/gets/var)在Dockerfile中执行类似的操作,但毫不奇怪,这行不通(您只得到了string
$(./script...)。

我应该提及的是,我知道将docker run --env...要执行此操作,但是我特别希望将其内置到容器中。

我是否缺少明显的东西?这有可能吗?


问题答案:

Docker v1.9或更高版本

如果您使用的是Docker
v1.9或更高版本,则可以通过支持构建时间参数来实现。参数声明中Dockerfile通过使用ARG声明。

ARG REQUIRED_ARGUMENT
ARG OPTIONAL_ARGUMENT=default_value

当您稍后实际使用构建映像时docker build,可以--build-arg按照docker
docs中
所述通过标志传递参数。

$ docker build --build-arg REQUIRED_ARGUMENT=this-is-required .

请注意, 建议对密码或密钥(例如密钥或凭据)使用构建时变量。

此外,构建时变量可能会对缓存产生很大影响。因此,Dockerfile的构建应格外小心,以便能够尽可能多地利用缓存,从而加快构建过程。

编辑:从leedm777:s answer输入后,添加了“比v1.9更新的docker”部分。

v1.9之前的Docker

如果您使用的是1.9之前的Docker版本,则ARG/ --build- arg方法是不可能的。您在构建期间无法解析此类信息,因此必须将它们作为参数传递给docker run命令。

Docker 映像 应随时间推移保持一致,而容器可以进行调整并视为“丢弃过程”。

  • 有关ENV的更多信息
  • Docker关于动态构建的讨论

解决此问题的旧方法是使用模板。这不是一个整洁的解决方案,但当时是极少数可行的选择之一。(此讨论的启示)。

  1. 将所有动态数据保存在html" target="_blank">json或yaml文件中
  2. 创建一个docker文件“模板”,以后可以扩展动态
  3. 编写一个脚本,使用您熟悉的一些模板库从配置数据创建Dockerfile


 类似资料:
  • 这个码头商。yml: 使用这个。env文件(它位于根文件夹中,如docker-compose.yml和Dockerfile): 和节点服务器启动中的以下代码: 我真的更喜欢使用第一种或第二种方法 docker版本:18.06.1-CE docker-compose版本:1.19.0

  • 因为我放在容器中的应用程序的bin名称可以更改(docker构建是更大构建的一部分,我很容易将正确的名称从一个构建传递到另一个构建)我想做这样的事情: < code >入口点["$PATH_TO_BIN"] 但由于没有外壳来评估,这通常会失败。理论上我可以去 但在这种情况下,我在执行时无法传递任何参数。 有没有可能在构建期间使用exec form并计算args或env变量(这样在运行时就不需要sh

  • 我试图在构建过程中设置docker容器中的环境变量,但没有成功。使用运行命令时设置它们有效,但我需要在构建过程中设置它们。 Dockerfile文件 我用来构建的命令 运行 我正在检查可用的环境变量,通过使用 结果是 TEST_ENV不在场

  • 在Docker主机上,我有: app.js DockerFile: 我还尝试在docker-compose.yml中使用,如下所示,这同样只使它在运行时可用,而不是在构建时可用: 请指教,我怎样才能使它以最不费解的方式工作?

  • 问题内容: 我正在使用ajax google maps脚本,需要在for循环中创建动态变量名称。 我想的是:,,等。我想这有什么问题 Firebug给了我这个: 问题答案: 为此使用数组。

  • 我是亚马逊网络服务的新手。我已经使用Elastic BeanStalk来承载我们的web应用程序。在web应用程序中,我使用了分配了某个位置的环境变量来将文件推入其中。 我已将VENDOR_HOME设置为,