Як перезапустити зупинений контейнер докера


90

Я запускаю контейнер докера з зображення за допомогою такої команди:

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

Після "mycommand"закінчення контейнер зупиняється (я думаю, він зупинений), але він не видаляється, оскільки я бачу його за допомогою цієї команди:

$ docker ps -a

Чи є спосіб перейти до restartцього контейнера з однаковими параметрами і зберегти дані, створені mycommand?


Чи задовольняє вас "том" або "монтування хост-каталогу"? Як і згаданий документ: docs.docker.com/engine/tutorials/dockervolumes
Хаомінг Чжан

Відповіді:


124

Так, коли початкова команда закінчує своє виконання, контейнер зупиняється.

Ви можете запустити зупинений контейнер, використовуючи:

docker start container_name

Якщо ви хочете побачити результати своєї команди, вам слід додати -aiпараметри:

docker start -ai container_name

PS. є docker restart container_nameале, яке використовується для перезапуску запущеного контейнера - я вважаю, що це не ваш випадок.


1
Мій контейнер зупиняється відразу після запуску, кожного разу. Не впевнений, який сенс у цьому. Використання команди -ai дає таку відповідь: Не вдалося відкрити файл вимог: [Errno 2] Немає такого файлу або каталогу: 'requirements.txt'
geoidesic

@geoidesic, будь ласка, надайте докладнішу інформацію? Про який тип файлу 'requirements.txt' ви говорите?
lmtx

1
@geoidesic, Щоб вирішити цю проблему, я змінив точку входу, щоб просто запустити команду sleep 900, яка дозволила мені потім підключитися до контейнера і запустити команди в ньому за допомогою docker exec -it container_name bash. Коли я запустив команду зсередини контейнера, я зміг зрозуміти, чому початкова реалізація мого сценарію зазнала невдачі, і я виправив це.
PatS

@PatS ви можете , будь ласка , поділіться , як ви в поєднанні startз sleep? Я не можу дійти до точки, де я можу бігтиexec
3pitt

9

По-перше, $ docker ps -aпоказує всі контейнери (ті, що працюють, і зупинені), тож саме тому ви не бачите списку зупиненого контейнера.

По-друге, ви можете легко запустити зупинений контейнер, що працює:

$ docker start container_name

Після запуску контейнера ви можете запустити свою команду, виконавши:

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

Речі, які ви створюєте у своєму контейнері, залишатимуться всередині вашого контейнера, доки він існує. Якщо ви хочете зберегти дані, навіть якщо ваш контейнер видалено, ви можете використовувати том .


1

Вона повинна бути

$ docker restart container_id # OR
$ docker restart container_name

прийняті відповіді вказують restartна вже запущений контейнер
3pitt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.