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
Offizielle Referenz Docker-Dokumentation | Umgebungsvariablen in Compose Ich werde erklären, während ich das Wissen zusammen mit organisiere.
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
DateiDie 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'
** 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.
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 **.
--$ ...
in docker-compose.yml
ist im Grunde eine Host-Umgebungsvariable, keine einfach zu verwendende Variable.
--env_file
und .env
Dateien sind völlig unterschiedlich
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.
docker-compose.yml
wie gewöhnliche Variablen zu verwendenJe 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.
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
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)