Как перезапустить остановленный док-контейнер


89

Я запускаю док-контейнер из образа с помощью следующей команды:

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

По "mycommand"завершении контейнер останавливается (я полагаю, он остановлен), но не удаляется, потому что я могу увидеть его с помощью этой команды:

$ docker ps -a

Есть ли способ к restartэтому контейнеру с такими же параметрами и сохранить данные, сгенерированные mycommand?


Удовлетворяет ли вас "том" или "монтирование каталога хоста"? Как упомянутый документ: docs.docker.com/engine/tutorials/dockervolumes
Haoming Zhang

Ответы:


123

Да, когда начальная команда завершает выполнение, контейнер останавливается.

Вы можете запустить остановленный контейнер, используя:

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.