[LINUX] Unterschied zwischen Docker-Compose-Datei env_file und .env-Datei

In "Docker-Compose" war ich bis jetzt verwirrt

--Datei, die von env_file in docker-compose.yml gelesen werden soll --Datei mit dem Namen ".env"

Notieren Sie sich den Unterschied, damit niemand den gleichen Fehler macht.

Da der Umgang mit Umgebungsvariablen zwischen Linux und Windows leicht unterschiedlich ist, werden Personen, die an Windows gewöhnt sind oder Docker für Windows verwenden, wahrscheinlich erwischt.

Es ist im Grunde dasselbe wie diese Frage und Antwort, aber mit etwas mehr Informationen.

docker-compose cannot understand my env_file | stack overflow

Docker-Compose- und Umgebungsvariablen

Offizielle Referenz Docker-Dokumentation | Umgebungsvariablen in Compose Ich werde erklären, während ich das Wissen zusammen mit organisiere.

In "docker-compose.yml" verwendete Host-Umgebungsvariablen

In docker-compose.yml können Sie die Umgebungsvariablen der Shell auf der Hostseite verwenden.

Zum Beispiel

docker-compose.yml


web:
  image: "webapp:${TAG}"

Wenn die Umgebungsvariable "TAG" auf der Hostseite festgelegt ist, wird dieser Wert eingefügt. Wenn beispielsweise "TAG" auf "v1.5" gesetzt ist, lautet der von "docker-compose build" erstellte Bildname "webapp: v1.5".

Mit dem Befehl docker-compose config können Sie überprüfen, welcher Wert in die festgelegte Umgebungsvariable eingefügt wird.

$ echo $TAG
#Echo für Windows%TAG%Bestätigen mit
v1.5

$ docker-compose config

version: '3'
services:
  web:
    image: 'webapp:v1.5'

.env Datei

Die Umgebungsvariablen, die Sie für den Host verwenden möchten, sind jedoch nicht immer festgelegt. Um dieses Problem zu umgehen, können Sie den Standardwert der Umgebungsvariablen festlegen, die in "docker-compose.yml" in der Datei ".env" verwendet wird. Zum Beispiel in der .env-Datei

.env


TAG=v1.5

Wenn es als festgelegt ist, lautet der Bildname wie oben "webapp: v1.5".

Die .env-Datei muss sich in dem Verzeichnis befinden, in dem Sie den Befehl ** docker-compose (Arbeitsverzeichnis) ** ausgeführt haben Es wird an anderer Stelle nicht erkannt. (Siehe Standardumgebungsvariablen in Datei deklarieren)

Diese .env-Dateieinstellung ist eine Problemumgehung, wenn der Host nicht über die Umgebungsvariablen verfügt, die Sie verwenden möchten. Wenn auf dem Host eine Umgebungsvariable mit demselben Namen festgelegt ist, hat dies natürlich Vorrang.

$ export TAG=v2.0
#Für Windows TAG einstellen=v2.Setzen Sie die Umgebungsvariable auf 0
$ docker-compose config

version: '3'
services:
  web:
    image: 'webapp:v2.0'

Umgebungsvariablen im gestarteten Container

** Abgesehen von der obigen Geschichte ** Durch Verwendung des Elements "Umgebung" in "docker-compose.yml" wird die Umgebungsvariable für den Container von "docker-compose run" oder "docker-compose up" gestartet Sie können die einstellen.

docker-compose.yml


web:
  environment:
    - DEBUG=1

Dann in dem Container, der gestartet wurde

$ echo $DEBUG
1

Und Umgebungsvariablen werden gesetzt.

Element von env_file in docker-compose.yml

Sie können die Umgebungsvariablen in diesem Container auch in eine separate Datei schreiben. Zum Beispiel in einer Datei namens "web-variables.env"

web-variables.env


DEBUG=1
FOO=bar

Und schreibe

web-variables.env


web:
  env_file:
    - web-variables.env

Und wenn Sie die zu lesende Datei im Element "env_file" in "docker-compose.yml" angeben, Im Container

$ echo $DEBUG
1
$ echo $FOO
bar

Und Umgebungsvariablen werden gesetzt.

Von Oben,

--Datei, die von env_file gelesen werden soll

Sie können sehen, dass ** völlig anders funktioniert **.

Zusammenfassung

--$ ...in docker-compose.yml ist im Grunde eine Host-Umgebungsvariable, keine einfach zu verwendende Variable. --env_file und .env Dateien sind völlig unterschiedlich

Wie sind Sie auf dieses Problem gekommen?

Schließlich, indem Sie so viel wie möglich suchen, um denjenigen zu helfen, die Probleme mit diesem Problem haben, es zu lösen. Hier ist, wie ich auf dieses Problem gekommen bin.

Ich habe versucht, die Umgebungsvariablen in docker-compose.yml wie gewöhnliche Variablen zu verwenden

Je nach Fall wird der Wert, der "$ ..." in "docker-compose.yml" zugewiesen werden soll, ordnungsgemäß verwendet. Ich habe unter dieser Datei env_file und .env gelitten, als ich versucht habe, verschiedene Fälle zu berücksichtigen. Ursprünglich sollten Sie docker-compose.yml mit der Option -f teilen.

Ich wollte den Proxy für Docker-Compose einstellen

Wenn Docker-Compose unter einem Proxy, in "Build" von "Docker-Compose", Sie müssen Umgebungsvariablen für den Proxy wie "HTTP_PROXY" im gestarteten Container festlegen.

Um dies zu lösen, können Sie das Element build> args und die Umgebung festlegen: item of docker-compose. Ich habe hier unter dieser Datei env_file und .env gelitten.

Basierend auf diesen habe ich einen Artikel für "Docker-Compose" unter dem Proxy gemacht.

Kombinieren Sie die Proxy-Einstellungen in Docker-Compose in einer Datei

Es wurde versucht, eine .env-Datei mit VSCode Remote Container zu verwenden

Advanced Container Configuration | VSCode In der Remote-Debugging-Funktion (Remote Container) mit dem Docker von VSCode Ich habe "docker-compose.yml" im Abschnitt "dockerComposeFile" von "devcontainer.json" angegeben und versucht, einen Remote-Container zu starten. Zu diesem Zeitpunkt habe ich versucht, die .env-Datei zum Festlegen des Proxys zu verwenden. Die .env-Datei konnte in Remote Container nicht korrekt eingestellt werden, selbst im selben Ordner wie "docker-compose.yml".

Die Ursache ist wie oben erwähnt Die .env-Datei muss sich im Verzeichnis befinden, als Sie den Befehl ** docker-compose ** ausgeführt haben Es war das.

In Remote Container wird Docker-Compose im Stammverzeichnis von VSCode ausgeführt Ich habe die .env-Datei in das Stammverzeichnis gestellt und es hat gut funktioniert. (Siehe Github Microsoft VSCode-Problem Nr. 222)

Recommended Posts

Unterschied zwischen Docker-Compose-Datei env_file und .env-Datei
Unterschied zwischen Prozess und Job
Unterschied zwischen Regression und Klassifikation
Unterschied zwischen np.array und np.arange
Unterschied zwischen MicroPython und CPython
Unterschied zwischen ps a und ps -a
Unterschied zwischen Return und Print-Python
Unterschied zwischen Ruby und Python Split
Unterschied zwischen Java und Python (Memo)
Unterschied zwischen == und ist in Python
Memorandum (Unterschied zwischen csv.reader und csv.dictreader)
(Hinweis) Unterschied zwischen Gateway und Standard-Gateway
Unterschied zwischen Numpys Randint und Randoms Randint
Unterschied zwischen sortiert und sortiert (Denkmal)
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
[Python] Unterschied zwischen Funktion und Methode
Unterschied zwischen SQLAlchemy flush () und commit ()
Python - Unterschied zwischen exec und eval
[Python] Unterschied zwischen randrange () und randint ()
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)
Funktion zum Öffnen einer Datei in Python3 (Unterschied zwischen open und codecs.open und Geschwindigkeitsvergleich)
[Xg Boost] Unterschied zwischen Softmax und Softprob
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
[Django ORM] Unterschied zwischen Werten () und nur ()
Unterschiede in der Beziehung zwischen PHP und Python schließlich und beenden
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
Unterschied zwischen linearer Regression, Ridge-Regression und Lasso-Regression
[Python] Unterschied zwischen Klassenmethode und statischer Methode
[Python Iroha] Unterschied zwischen Liste und Tupel
[Python] Unterschied zwischen Rand- und Randn-Ausgabe
Geschwindigkeitsunterschied zwischen wsgi, Flasche und Flasche
Unterschied zwischen numpy.ndarray und list (Dimension, Größe)
Unterschied zwischen ls -l und cat Befehl
Differenz- und Kompatibilitätsprüfung zwischen Keras und tf.keras # 1
Was ist der Unterschied zwischen "pip" und "conda"?
Unterschied zwischen Verwendung und Import in der Schildsprache
Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Über den Unterschied zwischen "==" und "is" in Python
Neue Datei erstellen [Vergleich zwischen Bash und PowerShell]
Über den Unterschied zwischen PostgreSQL su und sudo
Was ist der Unterschied zwischen Unix und Linux?
Berücksichtigung des Unterschieds zwischen ROC-Kurve und PR-Kurve
Grober Unterschied zwischen Unicode und UTF-8 (und seinen Begleitern)
Kann BERT den Unterschied zwischen "Ame (Süßigkeiten)" und "Ame (Regen)" verstehen?
Experiment zum Vergleich der Schreibgeschwindigkeit von Dateien zwischen Python 2.7.9 und Pypy 2.5.0
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Unterschied zwischen Numpy (n,) und (n, 1) Notation [Unterschied zwischen horizontalem Vektor und vertikalem Vektor]
Unterschied zwischen return, return None und no return description in Python
Wie man Argparse benutzt und den Unterschied zwischen Optparse
Mittendifferenz und Vorwärtsdifferenz
Zwischen parametrisch und nicht parametrisch
Bearbeiten Sie die Einstellungsdatei und führen Sie Docker-Compose Up aus (Django + MySQL ④).
Was ist der Unterschied zwischen symbolischen und harten Links?
Python-Modul num2words Verhaltensunterschied zwischen Englisch und Russisch
Python> Unterschied zwischen Inpbt- und Print-Ausgabe (Inpbt)> [1. 2. 3.] / Array ([1., 2., 3.], dtype = float32)
Verstehen Sie den Unterschied zwischen der kumulativen Zuordnung zu Variablen und der kumulativen Zuordnung zu Objekten
Listenverkettungsmethode in Python, Unterschied zwischen list.extend () und dem Operator "+"
Unterschied zwischen SQL Alchemy back_populated und backref und wenn keiner verwendet wird