Jak kontynuować kontener Docker, który wyszedł

263

Rozważać:

docker run -it centos /bin/bash

Nacisnąłem Ctrl+, Daby wyjść.

Chcę kontynuować uruchamianie tego kontenera, ale okazało się, że nie mogę.

Jedyną metodą jest

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

Czy mam rację? Czy istnieje lepsza metoda? (Używam dokera 0.8.0.)

Daniel YC Lin
źródło
1
Czy próbowałeś przypisać nazwę do kontenera i użyć tej nazwy, aby go kontrolować? Nawiasem mówiąc, przez „wyjście” masz na myśli oderwanie się od niego, prawda?
Eric Platon
12
Docker to narzędzie do programowania, przynajmniej tak go używam. Jeśli większość się nie zgadza, ktoś powinien powiedzieć Dockerowi, aby nie wskazywał StackOverflow jako miejsca do zadawania pytań. Jestem pewien, że nie jest to pierwsze pytanie podobne do „DevOps”, które może się znaleźć tutaj albo w SuperUser.
Ted M. Young
5
Docker to narzędzie programistyczne. Jest to już tag „docker”. Tak więc myślę, że należy zapytać w przepełnieniu stosu. Używam go do budowania obrazu, który wymaga kompilacji z czystego środowiska.
Daniel YC Lin
6
Chciałbym, żeby ludzie, którzy oznaczyli to jako „nie na temat”, wyjaśniliby dlaczego!
jpetazzo
2
Aby wesprzeć to pytanie jako nie będące tematem: meta.stackoverflow.com/q/276579/210336 i meta.stackoverflow.com/q/271279/210336 .
Matthijs Wessels

Odpowiedzi:

291

Możesz zrestartować istniejący kontener po jego wyjściu, a zmiany nadal tam są.

docker start  `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin
Luca G. Soave
źródło
3
w skrócie jako jedna linia: docker start `docker ps -q -l` && docker attach `docker ps -q -l`
Daniel YC Lin
7
Instruowanie jako jednej linii: docker start -i $(docker ps -q -l). ;-) Nazewnictwo może pomóc lepiej kontrolować, który kontener jest wybrany. -lzdobądź ostatni, ok ...
Eric Platon
103
Dla nowych użytkowników Linuksa `docker ps -q -l`bit jest rozszerzeniem. Zostanie zastąpiony identyfikatorem ostatniego utworzonego kontenera dokowania (-l). -q po prostu ukrywa inne informacje (identyfikatory łóżek) zwykle wysyłane przez `docker ps`. ---- uwaga: Backtick nie jest znakiem cudzysłowu, ma bardzo szczególne znaczenie. Wszystko, co wpisujesz między backtickami, jest oceniane (wykonywane) przez powłokę przed głównym poleceniem - unix.stackexchange.com/questions/27428/…
bnieland
1
Znalazłem kontener przechodzący w stan o nazwie, Created...z którego nie można go uruchomić za pomocą docker start .... Można go jednak ponownie uruchomić za pomocądocker restart ...
Voltaire,
2
Uwaga: -lpobiera tylko „najnowsze” okno dokowane. Jeśli jesteś podobny do mnie i docker ps -apokazuje więcej niż jedną rzecz, którą musisz uruchomić, możesz ponownie uruchomić „wszystkie” (-a) z nich, zmieniając powyższe polecenie na docker start `docker ps -q -a`. -qsprawia, że ​​jest „cichy” (nie rejestruje danych wyjściowych)
Rock Lee
148
docker start -a -i `docker ps -q -l`

Wyjaśnienie:

docker starturuchom kontener (wymaga nazwy lub identyfikatora)
-adołącz do
-iinteraktywnego trybu
docker pskontenera Wyświetl
-qlistę tylko kontenerów
-lLista identyfikatorów tylko ostatnio utworzony kontener

Pogański
źródło
docker ps -q -l, daje identyfikator kontenera ostatnio utworzonego, nawet jeśli jest w stanie początkowym.
Dharmang
co to jest tak zwane „dołączanie” do kontenera? „Dołącz”?
skytree
49

Posługiwać się:

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

Spowoduje to uruchomienie wszystkich kontenerów, które są w stanie wyjścia.

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

To połączy się z określonym kontenerem.

kg
źródło
2
Odkryłem, że był to jedyny, który dla mnie zadziałał .. z powodu tej kluczowej drugiej linii. docker exec -it <container id> /bin/bash(lub po prostu bash).
barlop
To działało dla mnie, ale muszę go uruchomić dwa razy, odkąd miałem dwa pojemniki. Więc jeśli pierwszy się rozpocznie, a drugi dostanie błąd. po prostu wciśnij ponownie to samo polecenie i powinien rozpocząć następny kontener.
Andrija J Fourkidney
20

Jeśli chcesz to zrobić za pomocą wielu łatwych do zapamiętania poleceń:

  1. lista zatrzymanych pojemników:

docker ps -a

  1. skopiuj nazwę lub identyfikator kontenera, do którego chcesz dołączyć, i uruchom kontener za pomocą:

docker start -i <name/id>

-iFlaga mówi doker dołączyć do standardowego wejścia kontenera.

Jeśli kontener nie został uruchomiony z interaktywną powłoką do połączenia, musisz to zrobić, aby uruchomić powłokę:

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

Jest /bin/shto skorupa zwykle dostępna z obrazami alpejskimi.

Kristianp
źródło
Niedoceniana odpowiedź pomogła mi znaleźć pojemnik, którego szukałem, znacznie łatwiej niż „odpowiedź” na to pytanie.
nicholas labrecque
3
Error response from daemon: Container <id> is not running
Cerin,
14

Jeśli chcesz kontynuować dokładnie jeden kontener Docker o znanej nazwie:

docker start  `docker ps -a -q --filter "name=elas"`
Nelson Dinh
źródło
1
dzięki @Nelson jest to dla mnie bardzo pomocne, aby uruchomić konkretnego
dokera
W takim przypadku możesz po prostu uruchomić docker start <name>gdzie <nazwa> to nazwa twojego kontenera. Przynajmniej z dokerem v19.03.8
Don Foumare
13

Wykonaj następujące kroki:

  1. Uruchom poniżej polecenia, aby zobaczyć, że wszystkie usługi kontenerowe działają i są zatrzymane. Daje -asię również możliwość zatrzymania pojemnika

    docker ps -a
    
  2. Następnie uruchom kontener dokera albo za pomocą container_idnazwy znacznika kontenera, albo

    docker start <CONTAINER_ID> or <NAMES>
    

    wprowadź opis zdjęcia tutaj

    Powiedz z powyższego obrazka, identyfikator kontenera 4b161b302337
    Tak więc polecenie do uruchomienia to

    docker start 4b161b302337
    
  3. Można sprawdzić, czy kontener działa

    docker ps
    
Anil Jain
źródło
9

Jeśli masz nazwany kontener, możesz go uruchomić, uruchamiając

docker container start container_name

gdzie nazwa_kontenera to nazwa kontenera, którą należy podać podczas tworzenia kontenera. Możesz zastąpić container_namego identyfikatorem kontenera, jeśli kontener nie ma nazwy. Identyfikator kontenera można znaleźć, uruchamiając:

docker ps -a
Gaurav Gupta
źródło
5

Te polecenia będą działać dla każdego kontenera (nie tylko tych ostatnich). Ten sposób zadziała nawet po ponownym uruchomieniu systemu. Aby to zrobić, te polecenia będą używać „id kontenera”.

Kroki:

  1. Wyświetl listę wszystkich dokerów za pomocą tego polecenia i zanotuj identyfikator kontenera, który chcesz zrestartować: docker ps -a

  2. Uruchom kontener za pomocą identyfikatora kontenera: docker start <container_id>

  3. Dołącz i uruchom swój kontener: docker attach <container_id>

UWAGA: Działa na systemie Linux

Sugandha Jain
źródło
1

wg nazwy

sudo docker start bob_the_container

lub przez Id

sudo docker start aa3f365f0f4e

to ponownie uruchamia zatrzymany kontener, użyj -i, aby dołączyć STDIN kontenera lub zamiast -i możesz dołączyć do sesji kontenera (jeśli uruchamiasz z -it)

sudo docker attach bob_the_container
karol wołonciej
źródło
0
docker start `docker ps -a | awk '{print $1}'`

Spowoduje to uruchomienie wszystkich kontenerów, które są w stanie „Opuszczone”

Deepank Varshney
źródło