Docker-compose.yml'de docker kapsayıcısı nasıl yeniden oluşturulur?


218

Docker-compose.yml içinde tanımlanan hizmetlerin kapsamı vardır. Bu hizmet başlatıldı. Bunlardan yalnızca birini yeniden oluşturmam ve diğer hizmetleri kullanmadan başlatmam gerekiyor. Aşağıdaki komutları çalıştırıyorum:

docker-compose up -d # run all services
docker-compose stop nginx # stop only one. but it still running !!!
docker-compose build --no-cache nginx 
docker-compose up -d --no-deps # link nginx to other services

Sonunda eski nginx konteyner aldım. Bu arada docker-compose çalışan tüm konteynerleri öldürmez!


4
docker-compose up --build
Jinna Balu

Yanıtlar:


233

liman işçisi

$docker-compose up -d --no-deps --build <service_name>

--no-deps - Bağlantılı hizmetleri başlatma.

--build - Kapsayıcıları başlatmadan önce görüntüler oluşturun.


19
docker-compose build service1 service2 --no-cache bu işi daha iyi yapar ( github.com/docker/compose/issues/1049 ). Kullanmadan önce inşa edilen önbellek kapları ile ilgili sorunum vardı docker-compose up -d --no-deps --build <service_name>
evgpisarchik

33
@evgpisarchik Emirler biraz dışarı, öyle olmalıdocker-compose build --no-cache service1 service2
Matthew Wilcoxson

183

Docker-compose ile 1.19 up

docker-compose up --build --force-recreate --no-deps [-d] [<service_name>..]

Bir veya daha fazla service_nameargüman olmadan tüm kapsayıcılar yeniden oluşturulacak

Yardım menüsünden

Options:
    -d, --detach        Detached mode: Run containers in the background,
                        print new container names. Incompatible with
                        --abort-on-container-exit.
    --no-deps           Don't start linked services.
    --force-recreate    Recreate containers even if their configuration
                        and image haven't changed.
    --build             Build images before starting containers.

4
Bunun soruyu nasıl cevapladığı konusunda kafam karıştı. Sadece bir kabı nasıl yeniden inşa edebiliriz?
Duncan Jones

11
Komutun sonuna adını ekleyerek yalnızca bir kapsayıcıyı yeniden oluşturabilirsiniz. docker-compose up -d --force-recreate --build container_name
HarlemSquirrel

Bir saniye bekleyin, bu kapsayıcıyı yeniden oluştururbuild --no-cache , komut açıklaması tamamen yanlış olmadıkça seçeneğe eşdeğer değildir
Slav

67

Bu, sorununuzu çözmelidir:

docker-compose ps # lists all services (id, name)
docker-compose stop <id/name> #this will stop only the selected container
docker-compose rm <id/name> # this will remove the docker container permanently 
docker-compose up # builds/rebuilds all not already built container 

12
İstersen stopve rmtüm kaplar o zaman komutunu kullanabilirsiniz docker-compose down. Çözümünüz sadece bazılarından kurtulmak istiyorsanız daha iyidir.
hirowatari

Bu çözüm, tüm liman
işçiliği

Değişen Dockerfile'ı yeniden oluşturmak için daha docker-compose build <id/name>önce çalıştırmam upgerekiyordu.
Vajk Hermecz

50

@HarlemSquirrel'in yayınladığı gibi, en iyisi ve doğru çözümü düşünüyorum.

Ancak, OP'ye özel sorunu yanıtlamak için, docker-compose.ymldosyadaki TÜM hizmetleri yeniden oluşturmak istemediğinden, yalnızca aşağıdaki komuttan ibarettir nginx:

docker-compose up -d --force-recreate --no-deps --build nginx

Seçenekler açıklaması:

Options:
  -d                  Detached mode: Run containers in the background,
                      print new container names. Incompatible with
                      --abort-on-container-exit.
  --force-recreate    Recreate containers even if their configuration
                      and image haven't changed.
  --build             Build images before starting containers.
  --no-deps           Don't start linked services.

9

Belki bu adımlar oldukça doğru değildir, ancak bunu beğendim:

docker oluşturmayı durdur: $ docker-compose down

kabı çıkarın: $ docker system prune -a

docker oluşturmaya başla: $ docker-compose up -d


4

Basitçe kullanın:

docker-compose build [yml_service_name]

Dosyadaki [yml_service_name]hizmet adınızla değiştirin docker-compose.yml. docker-compose restartDeğişikliklerin yapıldığından emin olmak için kullanabilirsiniz . --no-cacheÖnbelleği yoksaymak için kullanabilirsiniz .


2

Problem şu:

$ docker-compose stop nginx

işe yaramadı (hala çalıştığını söyledin). Yine de yeniden inşa edecekseniz, öldürmeyi deneyebilirsiniz:

$ docker-compose kill nginx

Hala çalışmıyorsa, doğrudan docker ile durdurmayı deneyin:

$ docker stop nginx

veya sil

$ docker rm -f nginx

Bu yine de işe yaramazsa, docker sürümünüzü kontrol edin, yükseltmek isteyebilirsiniz.

Bir hata olabilir, birinin sisteminize / sürümünüze uygun olup olmadığını kontrol edebilirsiniz. İşte bir çift, örneğin: https://github.com/docker/docker/issues/10589

https://github.com/docker/docker/issues/12738

Çözüm olarak, işlemi öldürmeyi deneyebilirsiniz.

$ ps aux | grep docker 
$ kill 225654 # example process id

1

Benim için sadece ikisi ile Docker Hub'dan yeni bağımlılıklar getirilen --no-cacheve --pull(mevcuttur docker-compose build.

# other steps before rebuild
docker-compose build --no-cache --pull nginx # rebuild nginx
# other steps after rebuild, e.g. up (see other answers)

0
docker-compose stop nginx # stop if running
docker-compose rm -f nginx # remove without confirmation
docker-compose build nginx # build
docker-compose up -d nginx # create and start in background

Kabın rm ile çıkarılması önemlidir. Çıkarmadan Docker eski kapsayıcıyı başlatır.


-9

Sadece:

$ docker-compose restart [yml_service_name]

4
bu yeni değişiklikler oluşturmaz. kılavuzdan - docker-compose.yml yapılandırmanızda değişiklik yaparsanız, bu komut çalıştırıldıktan sonra bu değişiklikler yansıtılmaz.
denov
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.