Docker-Compose nur für bestimmte Container


157

Ich habe eine docker-compose.yml, die mehrere Behälter enthält. Drei davon sind für meine App (Client, Server und Datenbank) und der Rest für verschiedene Entwicklungstools (z. B. psql, npm, manage.py usw.). Wenn ich das mache, werden docker-compose upalle gestartet, aber ich möchte nur, dass die drei wichtigsten beginnen. Aufgrund der von mir angegebenen Links kann ich nur diese drei mit starten, docker-compose up clientaber dann erfolgt die Ausgabe nur von diesem einen Container. Gibt es also eine Möglichkeit, eine der folgenden Aktionen auszuführen:

  1. Sagen Sie Docker-Compose, von welchen Containern gestartet werden soll docker-compose up
  2. Holen Sie sich die Ausgabe aller verknüpften Container von docker-compose up client

1
Gemäß den Dokumenten: Mit dieser docker-compose up [options] [SERVICE...]Option können Sie jede Teilmenge von Diensten starten , die Sie auflisten möchten .
Jesse Chisholm

Antworten:


255

Sie können Container starten, indem Sie Folgendes verwenden:

$ docker-compose up -d client

Dadurch werden Container im Hintergrund ausgeführt und die Ausgabe ist ab verfügbar

$ docker-compose logs

und es wird aus all Ihren gestarteten Containern bestehen


10
Perfekt. Lassen Sie einfach das Flag -d fallen, wenn Sie möchten, dass die Protokolle an stdout zurückgegeben werden
Natus Drew

Ist es möglich, einen abhängigen Container zu starten, wenn der Abhängigkeitscontainer bereits ausgeführt wird und ich ihn nicht neu starten möchte?
MajTheHero

42

So starten Sie einen bestimmten Dienst, der in Ihrer Docker-Compose-Datei definiert ist. Zum Beispiel, wenn Sie eine docker-compose.yml haben

sudo docker-compose start db  

gegeben eine Erstellungsdatei wie:

version: '3.3'

services:
   db:
     image: mysql:5.7
     ports:
       - "3306:3306"
     volumes:
       - ./db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: yourPassword
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: yourPassword

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "80:80"
     volumes:
       - ./l3html:/var/www/html
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: yourPassword
volumes:
    db_data:
    l3html:

Manchmal möchten Sie nur mySQL starten (manchmal möchten Sie nur eine Datenbank füllen), bevor Sie Ihre gesamte Suite starten.


9
Warum das sudovorher docker-compose ...? Das ist doch nicht nötig, oder?
Jochem Schulenklopper

1
Wenn Sie Ihren Benutzer nicht in der Docker-Gruppe haben, wäre dies erforderlich.
Delpo

Was ist der Unterschied, wenn ich sudo docker-compose up db anstelle vonsudo docker-compose start db
Luk Aron

3
@LukAron - startsetzt voraus, dass der Container bereits vorhanden ist und startet ihn nur, upzieht bei Bedarf Bilder, erstellt bei Bedarf Container und startet den Container.
Jesse Chisholm

10

Oh, nur damit:

$ docker-compose up client server database

4

Eine gute Lösung besteht darin, nur die gewünschten Dienste wie folgt auszuführen:

docker-compose up --build $(<services.txt)

und die Datei services.txt sehen folgendermaßen aus:

services1 services2, etc

Wenn die Abhängigkeit (abhängige_on) besteht, müssen verwandte Dienste natürlich zusammen ausgeführt werden.

--build ist zum Beispiel optional.


-1

Normalerweise möchten Sie dies nicht tun. Mit Docker Compose definieren Sie Dienste , die komponieren Ihre App. npmund manage.pysind nur Verwaltungsbefehle. Sie brauchen keinen Container für sie. Wenn Sie beispielsweise Ihre Datenbanktabellen mit erstellen müssen, müssen Sie lediglich Folgendes manage.pytun:

docker-compose run client python manage.py create_db

Stellen Sie sich das als den einmaligen Prüfstand vor, den Heroku verwendet.

Wenn Sie diese Verwaltungsbefehle wirklich als separate Container behandeln müssen (und für diese auch Docker Compose verwenden müssen), können Sie eine separate .ymlDatei erstellen und Docker Compose mit dem folgenden Befehl starten:

docker-compose up -f my_custom_docker_compose.yml

14
Viele Leute wollen das tun.
Kojiro

8
@ msrd0 Du willst das normalerweise nicht? Lassen Sie die Menschen selbst entscheiden!
Kris

1
Es sollte eine SO-Regel geben, die Sie nicht ablehnen können, ohne zu erklären, warum. Da dies (oder zumindest der erste Teil) am sinnvollsten ist, ist es sehr seltsam, für jeden möglichen Verwaltungsbefehl einen zusätzlichen Container zu haben.
Der
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.