【问题标题】:Docker compose variablesDocker 组合变量
【发布时间】:2017-06-08 13:37:42
【问题描述】:

我在使用 docker compose 时遇到问题,我想使用内部容器变量来创建另一个变量:

  myapp:
image: image
depends_on:
  - anotherimage
environment:
  - "VAR1=var1"
  - "VAR2=${HOSTNAME}_${VAR1}"

我在 VAR2 中得到的是 docker 引擎主机的主机名,而 VAR1 什么也没有

我想要类似的东西:

39ed52c98e92_var1

【问题讨论】:

    标签: variables docker containers docker-compose swarm


    【解决方案1】:

    Docker-compose 从您运行 docker-compose 命令的环境中解析 compose 文件中的变量,而不是从容器内部。如果要从容器内部配置环境,则需要将其添加到容器运行的命令或入口点。如果您还没有入口点,您可以创建一个:

    #!/bin/sh
    
    export VAR2=${HOSTNAME}_${VAR1}
    exec "$@"
    

    要使用它,你的 Dockerfile 会多出两行:

    COPY entrypoint.sh /entrypoint.sh
    ENTRYPOINT ["/entrypoint.sh"]
    

    在运行您的docker build 之前,请确保chmod 755 entrypoint.sh


    编辑:VAR1 无法在您的 yml 中解析是一个类似的问题。每个变量都由 docker-compose 为容器定义,但这不会改变 docker-compose 正在使用的主机上的环境。因此,您不能在 yml 的后面几行中使用该变量。

    【讨论】:

    • 这将更改 HOSTNAME 的来源。在问题中 HOSTNAME 是 docker 主机。但是,在您的 entrypoint.sh 中,它将解析为容器的主机名。不是吗?
    • @Robert 我相信这个问题是说他们正在他们的变量中获取 docker 主机并且他们想要容器主机名。
    • 见这部分and nothing for VAR1。问题是environment: VAR1 没有定义(环境定义中没有顺序)。你明白我了吗?
    • @Robert 这不是顺序,而是定义变量的位置。我刚刚意识到我没有回答这个问题并更新了我的答案。这两个问题的解决方案是相同的。
    • 好的,我明白你的意思。假设我想使用容器 HOSTNAME 变量的值,有没有办法在 yml 文件中指向它?目标是在从 yml 传递的 java 参数中为每个主机设置一个唯一的 var。
    猜你喜欢
    • 2018-04-20
    • 2022-01-10
    • 2016-04-28
    • 1970-01-01
    • 2016-03-17
    • 2022-07-12
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多