Çıkış yapan bir Docker kapsayıcısına nasıl devam edilir


263

Düşünmek:

docker run -it centos /bin/bash

Ben preslenmiş Ctrl+ Donu çıkmak için.

Bu konteyneri çalıştırmaya devam etmek istiyorum, ama yapamadığımı fark ettim.

Tek yöntem

docker commit `docker ps -q -l` my_image
docker run -it my_image /bin/bash

Haklı mıyım? Daha iyi bir yöntem var mı? (Docker 0.8.0 kullanıyorum.)


1
Kapsayıcıya bir ad atamaya ve denetlemek için bu adı kullanmaya çalıştınız mı? Bu arada, "çık" derken, ondan ayrılmayı kastediyorsunuz, değil mi?
Eric Platon

12
Docker olduğunu ben nasıl kullandığımız en azından var, programlama için bir araç. Çoğunluk aynı fikirde değilse, birisi Docker'a StackOverflow'u soru sormak için bir yer olarak göstermemesini söylemelidir. Buraya ya da SuperUser'a gidebilecek ilk "DevOps" benzeri soru olmadığından eminim.
Ted M. Young

5
Docker bir geliştirici aracıdır. Burada zaten bir 'liman işçisi' etiketi var. Yani, bence stackoverflow sormak uygun. Temiz ortamdan yapı gerektiren görüntü oluşturmak için kullanıyorum.
Daniel YC Lin

6
Keşke bunu "konu dışı" olarak etiketleyenlerin nedenini açıklamasını isterdim!
jpetazzo

2
Bu sorunun konu dışı olmamasını desteklemek için: meta.stackoverflow.com/q/276579/210336 ve meta.stackoverflow.com/q/271279/210336 .
Matthijs Wessels

Yanıtlar:


291

Varolan bir kapsayıcı çıktıktan ve değişiklikleriniz hâlâ devam ettikten sonra yeniden başlatabilirsiniz.

docker start  `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin

3
bir satır olarak özetlemek: docker start `docker ps -q -l` && docker attach `docker ps -q -l`
Daniel YC Lin

7
Tek satır olarak brifing için: docker start -i $(docker ps -q -l). ;-) Adlandırma, hangi kabın seçildiğini daha iyi kontrol etmeye yardımcı olabilir. -lson olsun, tamam ...
Eric Platon

103
Linux'ta yeni olanlar için, `docker ps -q -l`bit bir genişlemedir. Bunun yerine, oluşturulan son (-l) docker konteynerinin kimliği girilir. -q sadece genellikle çıktı tarafından gönderilen diğer bilgileri (bedsides id) bastırır `docker ps`. ---- not: Backtick bir tırnak işareti değildir, çok özel bir anlamı vardır. Geri tıklamalar arasında yazdığınız
bnieland

1
Ben bir Created...ile başlatılamaz denilen bir duruma giren konteyner bulduk docker start .... Ancakdocker restart ...
Voltaire

2
Not: -lyalnızca "en son" bağlantı istasyonunu alır. Benim gibiyseniz ve docker ps -abaşlatmanız gereken birden fazla şey gösteriyorsa, yukarıdaki komutu değiştirerek bunların tümünü "(-a) 'nı yeniden başlatabilirsiniz docker start `docker ps -q -a`. -qsadece "sessiz" yapar (çıkış günlüğü değil).
Rock Lee

148
docker start -a -i `docker ps -q -l`

Açıklama:

docker startbir kapsayıcı başlat (ad veya kimlik gerektirir)
-akapsayıcı
-ietkileşimli moda ekleme
docker psKapsayıcıları
-qlistele Yalnızca kapsayıcıları
-llistele yalnızca son oluşturulan kapsayıcıyı listeler


docker ps -q -l, Başlangıç ​​durumunda olsa bile, son oluşturulan kapsayıcı kimliğini verir.
Dharmang

konteynere "ekleme" denilen şey nedir? "Ekle"?
skytree

49

kullanın:

docker start $(docker ps -a -q --filter "status=exited")

Bu, çıkılan durumdaki tüm kapları başlatır.

docker exec -it <container-id> /bin/bash

Bu, belirli bir kaba bağlanır.


2
Bunun benim için işe yarayan tek kişi olduğunu gördüm .. Bu çok önemli ikinci hat yüzünden. docker exec -it <container id> /bin/bash(veya sadece bash).
barlop

Bu benim için çalıştı, ama iki kapım olduğu için iki kez çalıştırmaktan nefret ediyorum. Birincisi başlar ve ikincisi bir hata alırsa. sadece aynı komutu tekrar vurursanız bir sonraki kapsayıcıyı başlatmalıdır.
Andrija J Fourkidney

20

Bunu birden çok, hatırlaması kolay komutlarla yapmak istiyorsanız:

  1. durdurulan konteynerleri listele:

docker ps -a

  1. eklemek istediğiniz kapsayıcının adını veya kapsayıcı kimliğini kopyalayın ve kapsayıcıyı aşağıdakilerle başlatın:

docker start -i <name/id>

-iBayrak kabın stdin'e takmak için liman işçisi söyler.

Kapsayıcı bağlanmak için etkileşimli bir kabukla başlatılmadıysa, bir kabuk çalıştırmak için bunu yapmanız gerekir:

docker start <name/id>
docker exec -it <name/id> /bin/sh

Bu /bin/shkabuk genellikle alpin tabanlı görüntülerde bulunan kabuktur.


Yetersiz cevap, bu aradığım kapsayıcı bu soruya "cevap" çok daha kolay bulmama yardımcı oldu.
nicholas labrecque

3
Error response from daemon: Container <id> is not running
Cerin

14

Bilinen bir adla tam olarak bir Docker kapsayıcısına devam etmek istiyorsanız:

docker start  `docker ps -a -q --filter "name=elas"`

1
teşekkürler @ Nelson bu belirli docker başlatmak benim için çok yararlı
SACHIN CHAVAN

Bu durumda sadece docker start <name><ad> kabınızın adıdır. En azından liman işçisi v19.03.8
Don Foumare ile

13

Bu adımları takip et:

  1. Tüm konteyner hizmetlerinin hem çalıştığını hem de durduğunu görmek için aşağıdaki komutu çalıştırın. -aKabın da durduğunu görmek için seçenek verilir

    docker ps -a
    
  2. Ardından docker kapsayıcısını container_idveya kapsayıcı etiket adlarıyla başlatın

    docker start <CONTAINER_ID> or <NAMES>
    

    resim açıklamasını buraya girin

    Yukarıdaki resimde söyleyin, konteyner kimliği 4b161b302337
    Yani çalıştırılacak komut

    docker start 4b161b302337
    
  3. Konteynerin birlikte çalışıp çalışmadığı doğrulanabilir

    docker ps
    

9

Adlandırılmış bir kapsayıcı varsa, çalıştırılarak başlatılabilir

docker container start container_name

Burada container_name , konteyner oluşturulurken verilmesi gereken konteynerin adıdır. container_nameKapsayıcı adlandırılmamışsa kapsayıcı kimliğiyle değiştirebilirsiniz . Kapsayıcı kimliği şu şekilde bulunabilir:

docker ps -a

5

Bu komutlar herhangi bir kapsayıcı için çalışır (yalnızca son son çıkanlar için değil). Bu şekilde sisteminiz yeniden başlatıldıktan sonra bile çalışır. Bunu yapmak için, bu komutlar "kapsayıcı kimliği" kullanır.

Adımlar:

  1. Bu komutu kullanarak tüm liman işçilerini listeleyin ve yeniden başlatmak istediğiniz kapsayıcının kapsayıcı kimliğini not edin: docker ps -a

  2. Kapsayıcı kimliğini kullanarak kapsayıcınızı başlatın: docker start <container_id>

  3. Konteynerinizi takın ve çalıştırın: docker attach <container_id>

NOT: Linux üzerinde çalışır


1

isimle

sudo docker start bob_the_container

veya Kimlik ile

sudo docker start aa3f365f0f4e

bu durdurulan kapsayıcıyı yeniden başlatır, kabın STDIN'ini eklemek için -i kullanın veya kap oturumuna ekleyebileceğiniz -i yerine (-it ile çalıştırırsanız)

sudo docker attach bob_the_container

0
docker start `docker ps -a | awk '{print $1}'`

Bu, 'Çıkıldı' durumunda olan tüm kapları başlatır

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.