Docker-compose up veya run kullanmalı mıyım?


129

runBir docker-compose.ymldosyayı başlatmak için kullanmanın bir nedeni var mı yoksa sadece kullanmalısınız up?

Bunun runbelirli bir kapsayıcıyı başlatabileceğini anlıyorum , ancak tüm yml kapsayıcılarınızı başlatması için bir kap belirtmeden onu kullandığınız durumdan bahsediyorum.

Yanıtlar:


141

docker-compose run(2015) 'te bahsedildiği gibi

Çalıştırma tarafından iletilen komut, hizmet yapılandırmasında tanımlanan komutu geçersiz kılar .
Web hizmeti yapılandırma ile başladı Örneğin, bashdaha sonra docker-compose run web python app.pybunu geçersiz kılar python app.py.

İkinci fark, docker-compose runkomutun hizmet yapılandırmasında belirtilen bağlantı noktalarından hiçbirini oluşturmamasıdır .
Bu, zaten açık olan bağlantı noktaları ile bağlantı noktası çarpışmalarını önler. Hizmetin bağlantı noktalarının oluşturulmasını ve ana bilgisayarla eşlenmesini istiyorsanız, --service-ports bayrağını belirtin:

$ docker-compose run --service-ports web python manage.py shell

Dolayısıyla, bu özel ihtiyaçlara sahip değilseniz (bir komutu geçersiz kılmak veya farklı bağlantı noktalarında yalnızca bir konteyner çalıştırmak), docker-compose up(bir konteyner için bile) yeterlidir.

Bağlantı noktalarının neden veya ne zaman oluşturulmasını istemediğinizi açıklamaya yardımcı olabilir misiniz? Bu nedenle veya zaten açık olan bağlantı noktalarıyla çakışabilecekleri zaman

Basitçe docker-compose run, hizmetleriniz için tek seferlik komutları çalıştırmak için yapılmıştır.
Bu, zaten bir yaptıysanız docker-compose up, tüm konteynerlerinizin belirtilen bağlantı noktalarında zaten çalıştığı anlamına gelir docker-compose.yml. Bu aşamada
bir yapmak docker-compose run(tek seferlik bir komutu yürütmek için), aynı bağlantı noktasına uyuyorsa, hemen başarısız olur. Dolayısıyla, bu bağlantı noktalarının varsayılan olarak oluşturulmaması.


Başka bir kullanım durumu ( Compose ortam değişkenleri başvurusunda ):

Bir hizmette hangi ortam değişkenlerinin mevcut olduğunu görmek için çalıştırın docker-compose run SERVICE env.


Bu komutların en son (2019+) sürümü şu konumdadır docker/docker.github.io:


27

Python'u pdb hata ayıklayıcı ile kullanıyorsanız şunu belirtmek isterim:

import pdb; pdb.set_trace()

Betiğinizi kullanarak çalıştırırsanız, kabuğa düşmeyecektir:

docker-compose up

Bununla birlikte, çalıştırmayı kullanırsanız, beklendiği gibi hata ayıklayıcıya açılır:

docker-compose run

7

Docker docs'dan bir cevap var .

Genellikle istersiniz docker-compose up. A'da uptanımlanan tüm hizmetleri başlatmak veya yeniden başlatmak için kullanın docker-compose.yml. Varsayılan "ekli" modda, tüm kapsayıcılardan tüm günlükleri görürsünüz. "Ayrılmış" modda ( -d), Compose, kapsayıcıları başlattıktan sonra çıkar ancak kapsayıcılar arka planda çalışmaya devam eder.

docker-compose runKomut “bir defaya mahsus” veya “anlık” görevleri çalıştıran içindir. Çalıştırmak istediğiniz hizmet adını gerektirir ve yalnızca çalışan hizmetin bağlı olduğu hizmetler için kapsayıcıları başlatır. run Veri hacmi kabına veri eklemek veya kaldırmak gibi testler çalıştırmak veya bir yönetim görevi gerçekleştirmek için kullanın . runKomut gibi davranan docker run -tibu konteynere bir interaktif terminali açılır ve kap içinde işlemin çıkış durumu uyan bir çıkış durumu ile döner olmasıyla.


1
Kabul edilen cevap bu olmalıdır. Temel olarak, docker-compose runçalışan bir hizmete karşı komutları yürütmek ve docker-compose upyeni bir hizmet oluşturmak için kullanın.
goonerify
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.