运行容器是什么意思?

时间:2019-04-04 08:53:50

标签: docker

'docker exec'只能在正在运行的容器上使用,但是正在运行的容器是什么意思?这是否意味着容器应该在计算内容?还是我为容器定义的[command]问题?为什么我的TensorFlow容器始终处于停止状态?

在我使用'docker run'构建一个tensorflow容器后,该容器自动停止。我需要重新启动它,然后在其上执行命令。自创建容器以来,为什么容器不能一直处于运行状态?

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

然后它将弹出一个bash,我可以用它来控制容器。但是在我退出后,容器停止了运转。这意味着,我只能使用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 shell)。直接使用docker exec -it container_name bash可以再次控制正在运行的容器,而无需使用docker restart。此时,退出bash shell不会停止容器。

2 个答案:

答案 0 :(得分:0)

docker ps -adocker ps之间的区别正是您要寻找的:

来自the documentation

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

所以

  • docker ps仅提供运行中的容器
  • docker ps -a还会向您显示已停止的内容

因此,如果您希望容器能够长期运行(例如Web服务器),那么确实您的容器命令可能会出现问题,并且无法使容器保持活动状态。

还请注意,如果像您一样使用选项-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/

答案 1 :(得分:0)

当容器中正在运行活动进程时,该容器正在运行。 当您运行此tensorflow容器时,由于没有正在运行的进程

,它将退出

如果要运行

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