docker-compose dla tylko niektórych kontenerów


161

Mam docker-compose.ymlktóry zawiera kilka pojemników. Trzy z nich są przeznaczone dla mojej aplikacji (klient, serwer i baza danych), a pozostałe są przeznaczone dla różnych narzędzi programistycznych (np. Psql, npm, manage.py itp.). Kiedy robię, docker-compose upwszystkie są uruchamiane, ale chcę, aby zaczęły się tylko trzy główne. Ze względu na linki, które określiłem, mogę zacząć tylko od tych trzech, docker-compose up clientale wtedy dane wyjściowe pochodzą tylko z tego jednego kontenera. Czy można więc wykonać jedną z następujących czynności:

  1. Poinformuj docker-compose, od których kontenerów ma się zacząć docker-compose up
  2. Pobierz dane wyjściowe ze wszystkich połączonych kontenerów z docker-compose up client

1
Zgodnie z dokumentacją: docker-compose up [options] [SERVICE...]pozwala rozpocząć dowolny podzbiór usług, które chcesz wymienić.
Jesse Chisholm

Odpowiedzi:


257

Możesz rozpocząć kontenery, używając:

$ docker-compose up -d client

Spowoduje to uruchomienie kontenerów w tle, a dane wyjściowe będą dostępne z

$ docker-compose logs

i będzie się składał ze wszystkich rozpoczętych kontenerów


11
Idealny. Po prostu upuść flagę -d, jeśli chcesz, aby dzienniki powracały do ​​standardowego wyjścia
Natus Drew

Czy można uruchomić kontener zależny, jeśli kontener zależności już działa i nie chcę go ponownie uruchamiać?
majTheHero

43

Aby uruchomić określoną usługę zdefiniowaną w pliku Docker-Compose. na przykład jeśli masz plik docker-compose.yml

sudo docker-compose start db  

mając plik redagowania, taki jak:

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:

Czasami chcesz uruchomić tylko mySQL (czasami po prostu chcesz wypełnić bazę danych) przed uruchomieniem całego pakietu.


9
Dlaczego sudowcześniej docker-compose ...? To nie jest konieczne, prawda?
Jochem Schulenklopper

1
jeśli nie masz użytkownika w grupie docker, tak, byłoby to konieczne.
delpo

jaka różnica, jeśli użyję sudo docker-compose up db zamiastsudo docker-compose start db
Luk Aron

3
@LukAron - startzakłada, że ​​kontener już istnieje i po prostu go uruchamia, w uprazie potrzeby pobierze obrazy, w razie potrzeby utworzy kontenery, a następnie uruchomi kontener.
Jesse Chisholm


4

Dobrym rozwiązaniem jest uruchamianie tylko pożądanych usług, takich jak ta:

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

i services.txt wyglądają następująco:

services1 services2, etc

oczywiście, jeśli zależność (depends_on), musi wspólnie uruchamiać powiązane usługi.

--build jest opcjonalne, tylko na przykład.


0

Od wersji docker-compose1.5 możliwe jest przekazywanie wielu docker-compose.ymlplików z -fflagą . Dzięki temu możesz podzielić narzędzia deweloperskie na osobne, docker-compose.ymlktóre następnie dołączasz tylko na żądanie:

# start and attach to all your essential services
docker-compose up

# execute a defined command in docker-compose.dev.yml
docker-compose -f docker-compose.dev.yml run npm update

# if your command depends_on a service you need to include both configs
docker-compose -f docker-compose.yml -f docker-compose.dev.yml run npm update

Aby uzyskać dogłębną dyskusję na ten temat, zobacz docker / compose # 1896 .

Utworzyłem żądanie ściągnięcia, aby dodać funkcjonalność umożliwiającą osiągnięcie tego z dużo większą wygodą ( docker / compose # 7548 ), ale ponieważ wymaga to zmiany specyfikacji pliku redagowania, jest to teraz omówione w compose-spec / compose-spec # 87 .


-1

Zwykle nie chcesz tego robić. Za pomocą Docker Compose definiujesz usługi, które tworzą Twoją aplikację. npmi manage.pysą tylko poleceniami zarządzania. Nie potrzebujesz do nich pojemnika. Jeśli potrzebujesz, powiedzmy, utwórz tabele bazy danych za pomocą manage.py, wszystko, co musisz zrobić, to:

docker-compose run client python manage.py create_db

Pomyśl o tym jak o jednorazowych hamowniach Heroku.

Jeśli naprawdę potrzebujesz traktować te polecenia zarządzania jako oddzielne kontenery (a także używać do nich Docker Compose), możesz utworzyć oddzielny .ymlplik i uruchomić Docker Compose za pomocą następującego polecenia:

docker-compose up -f my_custom_docker_compose.yml

15
Wiele osób chce to zrobić.
kojiro

8
@ msrd0 Zwykle nie chcesz tego robić? Pozwól ludziom decydować za siebie!
Kris

1
Powinna istnieć zasada dotycząca SO, że nie można głosować przeciw bez wyjaśnienia dlaczego. Ponieważ to (a przynajmniej pierwsza część) ma największy sens, posiadanie dodatkowego kontenera na każde możliwe polecenie zarządzania jest bardzo dziwne.
thclark
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.