В чем смысл работы контейнера? - PullRequest
0 голосов
/ 04 апреля 2019

'docker exec' может использоваться только на работающем контейнере, но что означает запуск контейнера?Значит ли это, что контейнер должен что-то вычислять?или это проблема [команды], которую я определяю для контейнера?Почему мой контейнер TensorFlow всегда находится в состоянии остановки?

После того, как я использовал 'docker run', чтобы построить контейнер тензорного потока, контейнер автоматически остановился.Мне нужно перезапустить его и затем выполнить команду на нем.Почему контейнер не всегда работает, так как я его строю?

docker run -it --runtime=nvidia tensorflow/tensorflow:latest-gpu-py3

Затем появится всплывающее окно, которое я могу использовать для управления контейнером.Но после того, как я выхожу, контейнер остановился сам.Это означает, что я могу использовать только docker ps -a, чтобы увидеть свой контейнер, но docker ps не могу.Я должен перезапустить контейнер, если я хочу использовать свой контейнер снова.

UPDATE1: Если я хочу создать контейнер, такой как VM, я не могу использовать docker run с временным [command]как python ...Контейнер потеряет контроль над командой после завершения команды.docker restart не может запустить контейнер снова.Следовательно, docker exec не может применяться к нему. Вместо , используя bash или ничего, поскольку [command] может создать контейнер, который может быть перезапущен, поэтому может применяться с docker exec.

UPDATE2: docker run -d -it может создать работающий контейнер (но оболочка bash не всплывает, даже с bash).Непосредственное использование docker exec -it container_name bash может снова взять под контроль работающий контейнер, без docker restart.В это время выход из оболочки bash не остановит контейнер.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Контейнер работает, когда внутри него запущен активный процесс.Когда вы запустите этот тензор потока контейнера, он выйдет из-за отсутствия запущенного процесса

Если вы должны были запустить

docker run -it --runtime=nvidia tensorflow/tensorflow:latest-gpu-py3 bash

или

docker run -it --runtime=nvidia tensorflow/tensorflow:latest-gpu-py3 python <python script name>

, тогдаКонтейнер будет запускать скрипт bash / python как процесс и, следовательно, оставаться включенным, пока этот процесс выполняется

Просмотр запущенных процессов с помощью:

docker ps

Просмотр всех контейнеров (включая остановленные / завершенные задачи)с:

docker ps -a
0 голосов
/ 04 апреля 2019

Разница между docker ps -a и docker ps является именно тем, что вы ищете:

Из документации :

--all , -a      Show all containers (default shows just running) 

Итак

  • docker ps дает вам только запущенный контейнер
  • docker ps -a также показывает остановленные

Так что, вероятно, если вы ожидаете, что ваш контейнер будет работать долго, (как это было бы для веб-сервера), тогда действительно, ваша команда контейнера может иметь проблему и не поддерживать ваш контейнер живым.

Также учтите, что если вы запускаете свой контейнер с параметрами -ti,Как и вы, к нему прикрепляется интерактивный tty.

--tty , -t              Allocate a pseudo-TTY
--interactive , -i      Keep STDIN open even if not attached

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

Запуск его в автономном режиме с параметрами -dвозможно то, что вы ищете

docker run -d --runtime=nvidia tensorflow/tensorflow:latest-gpu-py3

Сопутствующая документация:

--detach , -d       Run container in background and print container ID

https://docs.docker.com/engine/reference/commandline/run/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...