docker-compose up hanya untuk kontainer tertentu

161

Saya punya docker-compose.ymlyang berisi beberapa kontainer. Tiga di antaranya untuk aplikasi saya (klien, server dan database) dan sisanya untuk berbagai alat dev (mis. Psql, npm, manage.py, dll). Ketika saya melakukan docker-compose upsemuanya dimulai, tetapi saya hanya ingin tiga yang utama untuk memulai. Karena tautan yang saya tentukan, saya dapat memulai hanya tiga dengan docker-compose up clienttetapi kemudian output hanya dari satu wadah itu. Jadi, apakah ada cara untuk melakukan salah satu dari yang berikut:

  1. Katakan kepada buruh pelabuhan-susun wadah mana yang harus dimulai dengan docker-compose up
  2. Dapatkan output dari semua kontainer yang terhubung dari docker-compose up client
aquavitae
sumber
1
Menurut dokumen: docker-compose up [options] [SERVICE...]memungkinkan Anda memulai bagian layanan apa pun yang ingin Anda daftarkan.
Jesse Chisholm

Jawaban:

258

Anda dapat memulai wadah dengan menggunakan:

$ docker-compose up -d client

Ini akan menjalankan kontainer di latar belakang dan output akan tersedia dari

$ docker-compose logs

dan itu akan terdiri dari semua kontainer yang Anda mulai

wsl
sumber
11
Sempurna. Jatuhkan saja flag -d jika Anda ingin melihat log bergema ke stdout
Natus Drew
Apakah mungkin untuk memulai wadah dependen, jika wadah keadaan darurat sudah berjalan dan saya tidak ingin memulai kembali?
majTheHero
43

Untuk memulai layanan tertentu yang ditentukan dalam file komposisi buruh pelabuhan Anda. misalnya jika Anda memiliki buruh pelabuhan-compose.yml

sudo docker-compose start db  

diberi file penulisan seperti:

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:

Beberapa kali Anda ingin memulai mySQL saja (kadang-kadang Anda hanya ingin mengisi basis data) sebelum Anda memulai seluruh rangkaian.

Hugo R
sumber
9
Kenapa sudosebelumnya docker-compose ...? Itu tidak perlu, kan?
Jochem Schulenklopper
1
jika Anda tidak memiliki pengguna di grup buruh pelabuhan ya, itu akan diperlukan.
delpo
apa bedanya jika saya menggunakan sudo docker-compose up db bukannyasudo docker-compose start db
Luk Aron
3
@LukAron - start mengasumsikan wadah sudah ada dan memulainya, upakan menarik gambar jika perlu, membuat wadah jika perlu, kemudian mulai wadah.
Jesse Chisholm
10

Oh, cukup dengan ini:

$ docker-compose up client server database
rappongy
sumber
4

Satu solusi yang baik adalah menjalankan hanya layanan yang diinginkan seperti ini:

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

dan file services.txt terlihat seperti ini:

services1 services2, etc

tentu saja jika dependancy (depend_on), perlu menjalankan layanan terkait bersama.

--build adalah opsional, misalnya.

matinfo
sumber
0

Sejak docker-composev1.5 dimungkinkan untuk mengirimkan beberapa docker-compose.ymlfile dengan -fflag . Ini memungkinkan Anda untuk membagi alat dev Anda menjadi terpisah docker-compose.ymlyang kemudian Anda hanya sertakan berdasarkan permintaan:

# 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

Untuk diskusi mendalam tentang hal ini lihat buruh pelabuhan / komposisi # 1896 .

Saya telah membuat permintaan tarik untuk menambahkan fungsionalitas untuk mencapai hal ini dengan lebih mudah ( buruh pelabuhan / komposisi # 7548 ) tetapi karena ini memerlukan perubahan dalam spesifikasi file penulisan, sekarang ini dibahas di compose-spec / compose-spec # 87 .

acran
sumber
-1

Anda biasanya tidak ingin melakukan ini. Dengan Docker Compose Anda menentukan layanan yang membuat aplikasi Anda. npmdan manage.pyhanya perintah manajemen. Anda tidak perlu wadah untuk mereka. Jika perlu, katakanlah buat tabel database Anda manage.py, yang harus Anda lakukan adalah:

docker-compose run client python manage.py create_db

Anggap saja sebagai satu-satunya dino yang digunakan Heroku.

Jika Anda benar-benar perlu memperlakukan perintah manajemen ini sebagai wadah terpisah (dan juga menggunakan Docker Compose untuk ini), Anda bisa membuat .ymlfile terpisah dan memulai Docker Compose dengan perintah berikut:

docker-compose up -f my_custom_docker_compose.yml
linkyndy
sumber
15
Banyak orang ingin melakukan ini.
kojiro
8
@ msrd0 Anda biasanya tidak ingin melakukan ini? Biarkan orang yang memutuskan sendiri!
Kris
1
Seharusnya ada aturan pada SO bahwa Anda tidak dapat melakukan downvote tanpa menjelaskan alasannya. Karena ini (atau setidaknya bagian pertama) paling masuk akal, memiliki wadah tambahan untuk setiap perintah manajemen yang mungkin adalah sangat aneh.
thclark