'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不会停止容器。
答案 0 :(得分:0)
docker ps -a
和docker ps
之间的区别正是您要寻找的:
--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
答案 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