以下から提供される作成ファイル内の環境変数の可用性:
一貫性がないように感じます。 デフォルト値の環境変数は、composeの外部から明示的に提供されない限り、compose内では使用できません。
次の最小限の作成ファイルについて考えてみます。
version: '3'
services:
example:
environment:
TAG: edge
image: alpine:${TAG}
${TAG}
変数は、composeファイル内のどこでも使用できません。
例えば:
$ 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がcomposeファイル内で利用できるようになりました。
作成ファイル内で使用できるようにするには、常にenv変数値を明示的に指定する必要があります。
すべての環境変数が作成ファイル内で利用可能/解決されることを期待するのは自然なことです。特に、最初にそれによって定義されたものはそうです。 そうではないようですが。
これが以前に回答された場合は申し訳ありませんが、問題リストにこの特定のユースケースは見つかりませんでした。
$ 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
が実行されているホストに存在する変数を使用して行われます。 これらは2つの異なるセットであり、別々のままにする必要があります。
説明してくれてありがとう!
同じ問題が発生しましたが、修正できません。 docker-compose呼び出しをラップしているシェルスクリプトがあります。
...
docker-compose $DOCKER_COMPOSE_FILES up $@
...
DOCKER_COMPOSE_FILESは、「-f file1.yml -ffile2.yml ...」の文字列です。 すべて正常に動作しています。
私のdocker-composeイメージエントリは次のとおりです。
...
image: "...-service:${DOCKER_TAG}"
...
私はいくつかの方法を試しました:
DOCKER_TAG=... docker-compose...
何も機能しません-DOCKER_TAGは使用できません。 誰かが私が間違っていることを知っていますか?
最も参考になるコメント
曖昧性解消ページを参照してください: https :
つまり、作成ファイルの
environment
エントリは、実行時にコンテナ/サービス内で使用できる環境変数を宣言します。 一方、変数の置換は、docker-compose
が実行されているホストに存在する変数を使用して行われます。 これらは2つの異なるセットであり、別々のままにする必要があります。