撰写文件中的环境变量可用性由以下提供:
感觉不一致。 除非从外部明确提供,否则具有默认值的环境变量在 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
请参考消歧义页面: 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}"
...
我尝试了几种方法:
DOCKER_TAG=... docker-compose...
没有任何效果 - DOCKER_TAG 不可用。 有人知道我做错了什么吗?
最有用的评论
请参考消歧义页面: https :
简而言之,撰写文件中的
environment
条目声明了在运行时在容器/服务中可用的环境变量。 另一方面,变量替换是使用正在执行docker-compose
的主机上存在的变量来完成的。 这是两个不同的集合,应该保持分开。