Ich habe eine docker-compose.yml
-Datei und im Terminal bin ich typing docker-compose up [something]
, aber ich möchte auch ein Argument an docker-compose.yml
übergeben. Ist das möglich? Ich habe über Interpolationsvariablen gelesen und versucht, eine Variable in der .yml
-Datei anzugeben, die ${testval}
und dann docker-compose up [something] var="test"
verwendet. Ich erhalte jedoch die folgende Fehlermeldung:
WARNUNG: Die Testval-Variable ist nicht festgelegt. Standardmäßig wird eine leere Zeichenfolge verwendet.
FEHLER: Kein solcher Dienst:testval=test
Basierend auf dnephin answer habe ich dieses sample repo erstellt, damit Sie eine Variable an Docker-Compose übergeben können.
Die Verwendung ist einfach:
TEST= docker-compose up
zum Erstellen und Starten von app
und db
Container. Die API sollte dann auf Ihrem Docker-Daemon auf Port 3030 ausgeführt werden. TEST=DO docker-compose up
zum Erstellen und Starten von app
und db
Container. Die API sollte den npm run test
in der package.json
-Datei ausführen. $env:TEST="";docker-compose up
zum Erstellen und Starten von app
und db
Container. Die API sollte dann auf Ihrem Docker-Daemon auf Port 3030 ausgeführt werden. $env:TEST="do";docker-compose up
zum Erstellen und Starten von app
und db
Container. Die API sollte den npm run test
in der package.json
-Datei ausführen. Sie müssen die Variablen als Umgebungsvariablen übergeben:
testvar=test docker-compose up ...
oder
export testvar=test
docker-compose up
Ich bin nicht sicher, was Sie hier tun möchten, aber wenn Sie eine Umgebungsvariable an einen bestimmten Container übergeben möchten, können Sie dies mit docker-compose.yml tun:
web:
...
environment:
- Rails_ENV=production
- VIRTUAL_Host=www.example.com
- VIRTUAL_PORT=3011
Diese Variablen sind spezifisch für den Container, für den Sie sie angegeben haben, und werden nicht von Containern gemeinsam genutzt.
Auch "docker-compose up" braucht keine Argumente.
docker-compose
enthält kein Flag oder einen Befehl, um Argumente zu übergeben.
Compose ist in erster Linie ein Werkzeug zum Ausführen von Diensten, nicht zum Erstellen von Images. Versuchen Sie, den in jeder Docker-Datei definierten ARG
für Argumente zu verwenden.
Es wird nicht möglich sein, jedes einzelne Erstellungsszenario zu unterstützen, da docker-compose
nicht für diesen Zweck entwickelt wurde. Sie können nur die gängigsten Buildszenarien wirklich unterstützen.
Weitere Informationen zu seinem Thema finden Sie hier .
Sie können docker-compose build --build-arg app_env=production
verwenden, um ein Bild zu erstellen. Dann können Sie docker-compose up
verwenden. Dies wird an das erstellte Bild angehängt.
# docker-compose.yml
services:
service_name:
build:
context: .
args:
- app_env=development
....
# Dockerfile
...
ARG app_env
ENV RACK_ENV $app_env
RUN if [ ${APP_ENV} = production ]; run command; else run another command; fi
...
Geben Sie dann Folgendes in die Befehlszeile ein
docker-compose build --build-arg app_env=production
docker-compose up