Compose: Vars lingkungan dengan nilai default tidak tersedia di dalam compose

Dibuat pada 13 Feb 2017  ·  3Komentar  ·  Sumber: docker/compose

Masalah

Ketersediaan variabel lingkungan di dalam file penulisan disediakan dari berikut ini:

  • shell atau .env file
  • didefinisikan dalam file tulis

terasa tidak konsisten. Vars lingkungan dengan nilai default tidak tersedia di dalam penulisan kecuali secara eksplisit disediakan dari luarnya.

Contoh

Pertimbangkan file penulisan minimal berikut:

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

Variabel ${TAG} tidak tersedia _anywhere_ di dalam file penulisan.

Misalnya:

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

Tetapi:

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

$TAG sekarang tersedia di dalam file penulisan.

Hasilnya

Diperlukan untuk selalu secara eksplisit memberikan nilai variabel env untuk dapat menggunakannya di dalam file penulisan.

Rasanya wajar untuk mengharapkan bahwa semua variabel env tersedia/diselesaikan di dalam file penulisan, terutama yang ditentukan olehnya sejak awal. Meskipun hal ini tampaknya tidak terjadi.

Maaf jika ini dijawab sebelumnya, saya tidak menemukan kasus penggunaan khusus ini dalam daftar masalah.

Spesifikasi teknis:

$ 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

Komentar yang paling membantu

Silakan merujuk ke halaman disambiguasi: https://docs.docker.com/compose/environment-variables/

Singkatnya, entri environment dalam file penulisan Anda mendeklarasikan variabel lingkungan yang akan tersedia di dalam wadah/layanan Anda saat runtime. Substitusi variabel di sisi lain dilakukan dengan menggunakan variabel yang ada di host tempat docker-compose dieksekusi. Itu adalah dua set yang berbeda dan harus tetap terpisah.

Semua 3 komentar

Silakan merujuk ke halaman disambiguasi: https://docs.docker.com/compose/environment-variables/

Singkatnya, entri environment dalam file penulisan Anda mendeklarasikan variabel lingkungan yang akan tersedia di dalam wadah/layanan Anda saat runtime. Substitusi variabel di sisi lain dilakukan dengan menggunakan variabel yang ada di host tempat docker-compose dieksekusi. Itu adalah dua set yang berbeda dan harus tetap terpisah.

Terimakasih atas klarifikasinya!

Saya mengalami masalah yang sama sekarang tetapi saya tidak dapat memperbaikinya. Saya memiliki skrip Shell yang membungkus panggilan docker-compose:

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

DOCKER_COMPOSE_FILES adalah string dengan "-f file1.yml -f file2.yml ...". Ini semua bekerja dengan baik.

Entri gambar komposisi buruh pelabuhan saya adalah:

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

Saya mencoba beberapa cara:

  • sumber file dengan DOCKER_TAG di dalam skrip shell
  • mengekspor DOCKER_TAG secara manual di skrip shell
  • Panggil docker-compose dengan DOCKER_TAG di depan:
    DOCKER_TAG=... docker-compose...

Tidak ada yang berhasil - DOCKER_TAG tidak tersedia. Apakah seseorang tahu apa yang saya lakukan salah?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat