На практике для запуска контейнера я делаю:
docker run a8asd8f9asdf0
Если это так, что делает:
docker start
делать?
В инструкции сказано
Запустить один или несколько остановленных контейнеров
execute
?
На практике для запуска контейнера я делаю:
docker run a8asd8f9asdf0
Если это так, что делает:
docker start
делать?
В инструкции сказано
Запустить один или несколько остановленных контейнеров
execute
?
Ответы:
Это очень важный вопрос, и ответ очень простой, но фундаментальный:
docker run IMAGE_ID
а не docker run CONTAINER_ID
docker stop CONTAINER_ID
, вы можете перезапустить тот же контейнер с помощью команды docker start CONTAINER_ID
, и данные и параметры будут такими же.docker rm container_id
). С другой стороны, данные томов переживают удаление контейнера, если -v
в командной строке явно не указан параметр. Расположение тома в хост-системе может быть проверено напрямую. Смотрите эту статью
&
в конце run
командной строки? Я нуждаюсь в этом в качестве местной службы (24 часа)
run
запускает изображениеstart
запускает контейнер .docker run
Документ упоминает:
Команда
docker run
сначала создает записываемый контейнерный слой поверх указанного изображения, а затем запускается его, используя указанную команду.То есть, докер пробег эквивалентен API
/containers/create
затем/containers/(id)/start
.
Вы не запускаете существующий контейнер, вы исполняете его с помощью docker (начиная с docker 1.3) .
Вы можете перезапустить покинутый контейнер .
-i
к docker run
для интерактивного процесса? Я имею в виду, что для запуска Docker необходим образ для запуска контейнера.
Пояснение с примером:
Предположим, у вас есть изображение игры (iso) на вашем компьютере.
Когда вы run
(монтируете свой образ как виртуальный диск), создается виртуальный диск со всем содержимым игры на виртуальном диске, и автоматически запускается установочный файл игры. [Запуск вашего образа докера - создание контейнера и его запуск.]
Но когда вы stop
(по аналогии с остановкой Docker), виртуальный диск все еще существует, но останавливает все процессы. [Поскольку контейнер существует до тех пор, пока он не будет удален]
И когда вы делаете start
(аналогично запуску Docker), с виртуального диска запускаются файлы игр. [запуск существующего контейнера]
В этом примере - образ игры - это ваш образ Docker, а виртуальный диск - ваш контейнер.
Ответ daniele3004 уже довольно хорош.
Просто быстрая и грязная формула для таких людей , как я , кто путает run
и start
время от времени:
docker run [...]
= docker pull [...]
+docker start [...]
"...docker run is equivalent to the API /containers/create then /containers/(id)/start.
(источник: docs.docker.com/engine/reference/commandline/run )
run
Команда создает контейнер из образа и затем запускает корневой процесс для этого контейнера. Запуск его с run --rm
флагом избавит вас от необходимости удалять ненужный мертвый контейнер после этого и позволит вам игнорировать существование docker start
и docker remove
вообще.
run
Команда делает несколько разных вещей:
docker run --name dname image_name bash -c "whoami"
docker ps
bash -c "whoami"
. Если запустить docker run --name dname image_name
без команды на выполнение, контейнер немедленно перейдет в остановленное состояние.docker remove
перед запуском контейнера под тем же именем.Как удалить контейнер, если он автоматически остановлен? Добавьте--rm
флаг вrun
команду:
docker run --rm --name dname image_name bash -c "whoami"
Как выполнить несколько команд в одном контейнере? Предотвращая отмирание этого корневого процесса. Это можно сделать, запустив какую-то бесполезную команду при запуске с--detached
флагом, а затем используя «execute» для запуска реальных команд:
docker run --rm -d --name dname image_name tail -f /dev/null
docker exec dname bash -c "whoami"
docker exec dname bash -c "echo 'Nnice'"
Зачем нам docker stop
тогда? Чтобы остановить этот затяжной контейнер, который мы запустили в предыдущем фрагменте с помощью бесконечной командыtail -f /dev/null
.