Docker Compose: env_file, environment i .env, co do czego służy

Przewodnik po env_file w Docker Compose

Docker Compose: env_file vs environment vs .env, wyjaśnienie | We.Inc

Co robią env_file, environment i plik .env w Docker Compose, która wartość wygrywa, gdy się ze sobą kłócą, i jak działa interpolacja ${VAR:-default}, z resolverem do sprawdzania.

W Docker Compose env_file wczytuje plik z liniami KEY=value do kontenera jednej usługi. Atrybut environment ustawia zmienne kontenera bezpośrednio w pliku i wygrywa z env_file, gdy oba podają ten sam klucz. Plik .env obok compose.yaml to coś innego: Compose czyta go, aby wypełnić placeholdery ${VAR} w samym pliku YAML.

Trzy sposoby przekazywania zmiennych do Compose

Zamieszanie bierze się z nazwy: plik o nazwie .env i atrybut o nazwie env_file brzmią jak to samo, ale pierwszy konfiguruje plik Compose, a drugi kontener. Użyj resolvera, aby zobaczyć, które źródło wygrywa dla danej zmiennej, a potem wypróbuj formy interpolacji na zmiennej ustawionej, pustej lub nieustawionej.

Najczęściej zadawane pytania

Czym różni się env_file od environment?

Oba umieszczają zmienne w kontenerze usługi. env_file czyta je z jednego lub kilku plików, environment wymienia je w compose.yaml. Gdy ten sam klucz pojawia się w obu, wygrywa wartość z environment, nawet jeśli jest pusta.

Czy Compose automatycznie przekazuje mój plik .env do kontenerów?

Nie. Plik .env projektu służy tylko do podstawiania ${VAR} w pliku Compose. Zmienna trafia do kontenera tylko wtedy, gdy usługa wymienia ją w environment albo wczytuje plik przez env_file.

Gdzie Compose szuka pliku .env?

W katalogu projektu, czyli w folderze podanym przez --project-directory, a w przeciwnym razie w folderze pierwszego pliku -f, a jeśli go nie ma, w bieżącym folderze. Użyj --env-file, aby wskazać inny plik; przy kilku plikach późniejsze nadpisują wcześniejsze.

Czy ścieżki w env_file są względne wobec miejsca, z którego uruchamiam polecenie?

Nie. Względne ścieżki w env_file są rozwiązywane względem folderu, w którym leży plik Compose, więc stos działa niezależnie od tego, skąd go uruchomisz.

Co się dzieje z ${VAR}, gdy VAR nie jest ustawiona?

Compose wypisuje ostrzeżenie i podstawia pusty ciąg. Użyj ${VAR:-fallback}, aby podać wartość domyślną, lub ${VAR:?message}, aby zamiast tego zatrzymać się z błędem.

Lista priorytetów od góry do dołu

Klucze bez wartości

Wszystkie formy interpolacji

Co daje każda forma dla VAR ustawionej, pustej lub nieustawionej

Pliki Compose do skopiowania

env_file plus nadpisania w environment

Wspólne ustawienia pochodzą z plików; wpisy environment wygrywają dla kluczy, które wymieniają. Plik lokalny jest opcjonalny.

Plik .env projektu używany tylko do interpolacji

Te dwie wartości wypełniają placeholdery w compose.yaml. Żadna nie trafia do kontenera, chyba że wspomina o niej usługa.

Użycie tych wartości w compose.yaml

Tag obrazu i publikowany port pochodzą z .env; hasło musi być ustawione, inaczej Compose zatrzyma się z jasnym komunikatem.

Sprawdź, co wyliczył Compose

config wypisuje ostateczny model z wypełnionymi wszystkimi zmiennymi; --environment wymienia wartości użyte do podstawienia.

Która wartość wygrywa?

Zmienna APP_MODE jest ustawiona w miejscach zaznaczonych poniżej.

Gdzie ustawiona jest zmienna

Wartość

Kontener dostaje APP_MODE={v} z: {n}

Nigdzie nieustawiona, więc APP_MODE nie istnieje w kontenerze.

Tester interpolacji

Wyrażenie

VAR jest

ustawiona, ale pusta

Wartość VAR

Wynik: {v}

Wynik: pusty ciąg

Compose zatrzymuje się z błędem: {v}

Wynik: pusty ciąg, a Compose wypisuje ostrzeżenie

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony