docker-compose yalnızca belirli kapsayıcılar için


179

Bir sahip docker-compose.ymlçeşitli kaplar ihtiva etmektedir. Bunlardan üçü uygulamam için (istemci, sunucu ve veritabanı) ve geri kalanı çeşitli geliştirme araçları (ör. Psql, npm, manage.py, vb.) İçindir. Yaptığım zaman docker-compose uphepsi başlatılıyor, ancak sadece üç ana olanın başlamasını istiyorum. Belirttiğim bağlantılar nedeniyle, sadece bu üçüyle başlayabilirim, docker-compose up clientancak çıktı yalnızca o konteynerden geliyor. Öyleyse, aşağıdakilerden birini yapmanın bir yolu var mı:

  1. Docker-compose'a hangi kapsayıcıların başlaması gerektiğini söyleyin docker-compose up
  2. Tüm bağlantılı kapsayıcılardan çıktı alın docker-compose up client

1
Dokümanlara göre: docker-compose up [options] [SERVICE...]listelemeyi önemsediğiniz servis alt kümesini başlatmanıza izin verir.
Jesse Chisholm

Yanıtlar:


281

Kapsayıcıları aşağıdakileri kullanarak başlatabilirsiniz:

$ docker-compose up -d client

Bu, kapsayıcıları arka planda çalıştıracak ve çıktı,

$ docker-compose logs

ve başlattığınız tüm kapsayıcılardan oluşacaktır


13
Mükemmel. Günlüklerin stdout'ta yankılandığını görmek istiyorsanız -d bayrağını bırakın
Natus Drew

Depency container zaten çalışıyorsa ve onu yeniden başlatmak istemiyorsam, bağımlı bir kapsayıcı başlatmak mümkün müdür?
majTheHero

depends_onDocker-compose.yml
Thanwa

51

Docker-compose dosyanızda tanımlanan belirli bir hizmeti başlatmak için. örneğin bir docker-compose.yml dosyanız varsa

sudo docker-compose start db  

aşağıdaki gibi bir oluşturma dosyası verildiğinde:

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:

Bazı zamanlar tüm paketinize başlamadan önce yalnızca mySQL'i başlatmak istersiniz (bazen sadece bir veritabanı doldurmak istersiniz).


9
Neden sudoönce docker-compose ...? Bu gerekli değil, değil mi?
Jochem Schulenklopper

1
docker grubunda kullanıcınız yoksa evet, bu gerekli olacaktır.
delpo

1
sudo docker-compose up db yerine kullanırsam ne fark eder sudo docker-compose start db
Luk Aron

4
@LukAron - startkabın zaten var olduğunu varsayar ve onu başlatır, upgerekirse görüntüleri çeker, gerekirse kaplar oluşturur ve ardından kabı başlatır.
Jesse Chisholm

10

Oh, sadece bununla:

$ docker-compose up client server database

6

Bunun gibi yalnızca istenen hizmetleri çalıştırmak iyi bir çözümdür:

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

ve services.txt dosyası şuna benzer:

services1 services2, etc

tabii eğer bağımlılık (bağlıdır_on) ise, ilgili hizmetleri birlikte çalıştırmanız gerekir.

--build isteğe bağlıdır, örneğin.


4

docker-composeV1.5 sürümünden bu yana , bayrakla birden çok docker-compose.ymldosyayı iletmek-f mümkündür . Bu, geliştirme araçlarınızı docker-compose.ymldaha sonra yalnızca isteğe bağlı olarak dahil edeceğiniz ayrı bir bölüme ayırmanıza olanak tanır :

# 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

Bununla ilgili derinlemesine bir tartışma için docker / compose # 1896'ya bakın .

Bunu çok daha kolay bir şekilde elde etmek için bir işlevsellik eklemek için bir çekme isteği oluşturdum ( docker / compose # 7548 ), ancak bu, dosya oluşturma özelliklerinde bir değişiklik gerektirdiğinden, bu şimdi compose-spec / compose-spec # adresinde tartışılmıştır. 87 .


1

Aslında mevcut projemde çok benzer bir zorluk yaşadım. Bu beni docker-compose-profile (veya kısaca: dcp) dediğim küçük bir betik yazma fikrine götürdü. Bunu bugün GitLab'da docker-compose-profile olarak yayınladım . Kısacası: Şimdi gibi bir komut kullanarak önceden tanımlanmış birkaç docker-compose profiline başlayabilirim dcp -p some-services "up -d". Denemekten çekinmeyin ve daha fazla iyileştirme için bazı geri bildirim veya önerilerde bulunun.


-1

Genellikle bunu yapmak istemezsiniz. Docker oluştur'da ile tanımlamak servisleri oluşturmak uygulamanızı. npmve manage.pysadece yönetim komutlarıdır. Onlar için bir konteynere ihtiyacınız yok. Gerekirse, veritabanı tablolarınızı oluşturun manage.py, tek yapmanız gereken şudur:

docker-compose run client python manage.py create_db

Heroku'nun kullandığı tek seferlik dynos'lar olarak düşünün.

Bu yönetim komutlarını gerçekten ayrı kapsayıcılar olarak ele almanız gerekiyorsa (ve bunlar için Docker Compose'u da kullanmanız gerekiyorsa), ayrı bir .ymldosya oluşturabilir ve aşağıdaki komutla Docker Compose'u başlatabilirsiniz:

docker-compose up -f my_custom_docker_compose.yml

15
Birçok insan bunu yapmak istiyor.
kojiro

8
@ msrd0 Genellikle bunu yapmak istemez misiniz? Bırakın insanlar kendileri karar versin!
Kris

1
SO'da nedenini açıklamadan olumsuz oy kullanamayacağınız bir kural olmalıdır. Bu (veya en azından ilk bölüm) en mantıklı olduğu için, olası her yönetim komutu için ek bir kapsayıcıya sahip olmak çok garip.
thclark
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.