Jak ponownie uruchomić zatrzymany kontener Dockera

89

Uruchamiam kontener docker z obrazu za pomocą następującego polecenia:

$ docker run -d myimage /bin/bash -c "mycommand"

Po "mycommand"zakończeniu kontener jest zatrzymywany (przypuszczam, że jest zatrzymany), ale nie jest usuwany, ponieważ widzę go za pomocą tego polecenia:

$ docker ps -a

Czy istnieje sposób do restarttego kontenera z tymi samymi parametrami i zachować dane wygenerowane przez mycommand?

Bob5421
źródło
Czy „wolumen” lub „montowanie katalogu hosta” Cię satysfakcjonuje? Jak wspomniany dokument: docs.docker.com/engine/tutorials/dockervolumes
Haoming Zhang

Odpowiedzi:

123

Tak, po zakończeniu wykonywania polecenia początkowego kontener zatrzymuje się.

Możesz uruchomić zatrzymany kontener za pomocą:

docker start container_name

Jeśli chcesz zobaczyć wynik swojego polecenia, powinieneś dodać -aiopcje:

docker start -ai container_name

PS. istnieje docker restart container_nameale, które jest używane do ponownego uruchomienia działającego kontenera - uważam, że nie jest to twój przypadek.

lmtx
źródło
1
Mój pojemnik zatrzymuje się natychmiast po uruchomieniu za każdym razem. Nie wiem, o co w tym chodzi. Użycie polecenia -ai daje następującą odpowiedź: Nie można otworzyć pliku wymagań: [Errno 2] Nie ma takiego pliku lub katalogu: „
Requirements.txt
@geoidesic czy możesz podać więcej szczegółów? O jakim rodzaju w pliku „Requirements.txt” mówisz?
lmtx
1
@geoidesic, Aby rozwiązać ten problem, zmieniłem punkt wejścia, aby po prostu uruchomić polecenie sleep 900, które pozwoliło mi następnie połączyć się z kontenerem i uruchomić w nim polecenia za pomocą docker exec -it container_name bash. Kiedy uruchomiłem polecenie z wnętrza kontenera, mogłem zobaczyć, dlaczego początkowa implementacja mojego skryptu nie powiodła się i naprawiłem to.
PatS
@PatS czy możesz podzielić się swoimi połączeniami startz sleep? Nie jestem w stanie dojść do punktu, w którym mogę biecexec
3pitt
9

Najpierw $ docker ps -apokazuje wszystkie kontenery (te, które są uruchomione i te, które zostały zatrzymane), więc to jest powód, dla którego nie widzisz swojego zatrzymanego kontenera na liście.

Po drugie, możesz łatwo uruchomić zatrzymany kontener:

$ docker start container_name

Po uruchomieniu kontenera możesz uruchomić polecenie przez:

$ docker exec -it container_name bash -c "mycommand"

Rzeczy, które utworzysz w swoim kontenerze, pozostaną w nim tak długo, jak długo istnieje. Jeśli chcesz zachować dane nawet po usunięciu kontenera, możesz użyć woluminu .

lmiguelvargasf
źródło
1

Powinno być

$ docker restart container_id # OR
$ docker restart container_name
Doan Vu
źródło
zaakceptowana odpowiedź wskazuje restartna już działający kontener
3pitt