Compose: 具有默认值的环境变量在 compose 中不可用

创建于 2017-02-13  ·  3评论  ·  资料来源: docker/compose

问题

撰写文件中的环境变量可用性由以下提供:

  • shell 或 .env 文件
  • 在撰写文件中定义

感觉不一致。 除非从外部明确提供,否则具有默认值的环境变量在 compose 内部不可用。

这个例子

考虑以下最小撰写文件:

version: '3'
services:
    example:
        environment:
            TAG: edge
        image: alpine:${TAG}

${TAG}变量在 compose 文件中_anywhere_ 不可用。

例如:

$ docker-compose up
WARNING: The TAG variable is not set. Defaulting to a blank string.
Pulling example (alpine:latest)...
...

但:

$ TAG=edge docker-compose up
Pulling example (alpine:edge)...
...

$TAG 现在在撰写文件中可用。

结果

需要始终明确提供 env 变量值,以便能够在撰写文件中使用它们。

很自然地期望所有 env 变量在 compose 文件中都可用/解析,尤其是那些由它首先定义的变量。 虽然情况似乎并非如此。

抱歉,如果之前回答过这个问题,我在问题列表中没有找到这个特定的用例。

技术规格:

$ docker version
Client:
 Version:      1.13.1
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      1.13.1
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      linux/amd64
 Experimental: true
$ docker-compose version
docker-compose version 1.11.1, build 7c5d5e4
docker-py version: 2.0.2
CPython version: 2.7.12
OpenSSL version: OpenSSL 1.0.2j  26 Sep 2016
kinquestion

最有用的评论

请参考消歧义页面: https :

简而言之,撰写文件中的environment条目声明了在运行时在容器/服务中可用的环境变量。 另一方面,变量替换是使用正在执行docker-compose的主机上存在的变量来完成的。 这是两个不同的集合,应该保持分开。

所有3条评论

请参考消歧义页面: https :

简而言之,撰写文件中的environment条目声明了在运行时在容器/服务中可用的环境变量。 另一方面,变量替换是使用正在执行docker-compose的主机上存在的变量来完成的。 这是两个不同的集合,应该保持分开。

感谢您的澄清!

我现在遇到了同样的问题,但我无法解决它。 我有一个封装 docker-compose 调用的 shell 脚本:

...
docker-compose $DOCKER_COMPOSE_FILES up $@
...

DOCKER_COMPOSE_FILES 是一个带有“-f file1.yml -f file2.yml ...”的字符串。 一切正常。

我的 docker-compose 图像条目是:

...
image: "...-service:${DOCKER_TAG}"
...

我尝试了几种方法:

  • 在 shell 脚本中使用 DOCKER_TAG 获取文件
  • 在 shell 脚本中手动导出 DOCKER_TAG
  • 使用前面的 DOCKER_TAG 调用 docker-compose:
    DOCKER_TAG=... docker-compose...

没有任何效果 - DOCKER_TAG 不可用。 有人知道我做错了什么吗?

此页面是否有帮助?
0 / 5 - 0 等级