webentwicklung-frage-antwort-db.com.de

Wie gebe ich ein Argument zusammen mit Docker-Compose auf

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

12
BubbleTea

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. 
11
Rafael Delboni

Sie müssen die Variablen als Umgebungsvariablen übergeben:

testvar=test docker-compose up ...

oder 

export testvar=test
docker-compose up
8
dnephin

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.

3
TopperH

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 .

2
Hemerson Varela

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
1
Alex P