docker-compose up per solo determinati contenitori


161

Ne ho uno docker-compose.ymlche contiene diversi contenitori. Tre di questi sono per la mia app (client, server e database) e il resto per vari strumenti di sviluppo (ad esempio psql, npm, manage.py, ecc.). Quando li faccio docker-compose uptutti vengono avviati, ma voglio solo iniziare i tre principali. A causa dei collegamenti che ho specificato, posso iniziare solo con quei tre docker-compose up clientma poi l'output proviene solo da quel contenitore. Quindi, c'è un modo per eseguire una delle seguenti operazioni:

  1. Indica a docker-compose quali contenitori dovrebbero iniziare docker-compose up
  2. Ottieni output da tutti i contenitori collegati da docker-compose up client

1
Secondo i documenti: docker-compose up [options] [SERVICE...]ti consente di iniziare qualsiasi sottoinsieme di servizi che desideri elencare.
Jesse Chisholm,

Risposte:


258

È possibile avviare i contenitori utilizzando:

$ docker-compose up -d client

Questo eseguirà i contenitori in background e l'output sarà disponibile da

$ docker-compose logs

e sarà composto da tutti i container avviati


11
Perfetto. Basta rilasciare la bandiera -d se si desidera vedere i registri riecheggiati su stdout
Natus Drew,

È possibile avviare un contenitore dipendente, se il contenitore di dipendenze è già in esecuzione e non desidero riavviarlo?
majTheHero

43

Per avviare un particolare servizio definito nel file di composizione mobile. per esempio se hai un docker-compose.yml

sudo docker-compose start db  

dato un file di composizione come:

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:

Alcune volte vuoi avviare solo mySQL (a volte vuoi solo popolare un database) prima di avviare l'intera suite.


9
Perché il sudoprima docker-compose ...? Non è necessario, vero?
Jochem Schulenklopper,

1
se non si dispone del proprio utente nel gruppo finestra mobile sì, sarebbe necessario.
delpo

qual è la differenza se uso sudo docker-compose up db invece disudo docker-compose start db
Luk Aron il

3
@LukAron: startpresume che il contenitore esista già e lo avvii appena, estrarrà le upimmagini se necessario, creerà i contenitori se necessario, quindi avvierà il contenitore.
Jesse Chisholm,

10

Oh, solo con questo:

$ docker-compose up client server database

4

Una buona soluzione è eseguire solo i servizi desiderati come questo:

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

e il file services.txt è simile al seguente:

services1 services2, etc

ovviamente se la dipendenza (dipende_on), è necessario eseguire insieme i servizi correlati.

--build è facoltativo, solo per esempio.


0

Dalla docker-composev1.5 è possibile passare più docker-compose.ymlfile con il -fflag . Ciò ti consente di dividere gli strumenti di sviluppo in uno separato docker-compose.ymlche poi includi solo su richiesta:

# 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

Per una discussione approfondita su questo vedi docker / compose # 1896 .

Ho creato una richiesta pull per aggiungere una funzionalità per ottenere ciò con molta più convenienza ( docker / compose # 7548 ) ma poiché ciò richiede un cambiamento nelle specifiche del file di composizione, questo è ora discusso su compose-spec / compose-spec # 87 .


-1

Di solito non vuoi farlo. Con Docker Compose definisci i servizi che compongono la tua app. npme manage.pysono solo comandi di gestione. Non hai bisogno di un contenitore per loro. Se è necessario, ad esempio, creare le tabelle del database con manage.py, tutto ciò che devi fare è:

docker-compose run client python manage.py create_db

Pensa a come i dynos unici utilizzati da Heroku.

Se è davvero necessario trattare questi comandi di gestione come contenitori separati (e utilizzare anche Docker Compose per questi), è possibile creare un .ymlfile separato e avviare Docker Compose con il seguente comando:

docker-compose up -f my_custom_docker_compose.yml

15
Molte persone vogliono farlo.
Kojiro,

8
@ msrd0 Di solito non vuoi farlo? Lascia che le persone decidano da sole!
Kris,

1
Dovrebbe esserci una regola su SO che non è possibile effettuare il downgrade senza spiegare il perché. Poiché questa (o almeno la prima parte) ha più senso, avere un contenitore aggiuntivo per ogni possibile comando di gestione è super strano.
tharkark
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.