当主命令的进程未运行或已结束时,如何在docker容器中运行命令?

时间:2018-03-13 20:39:32

标签: docker

上下文

通常,我可以为容器设置命令。例如。如果我创建一个基于python 2.7的容器并运行django代码,我的命令将是这样的:

  

$ docker container create --name my-django-proj -v path / to / my / proj:/ project -ti python:2.7“cd / project&& python manage.py runserver”

(请这只是一个例子!我知道我可以使用gunicorn,所以,但是主题不是关于django,而是docker。另外,让我们假设路径中有一个实际的Django项目/到/我/凸出

这个命令有一个警告:如果我想在我的Django服务器中执行维护任务,并且必须终止进程,容器将停止。

所以,我想的是:让容器执行bash,一旦进入bash,手动执行这两个命令。的确,这个选择对我很有帮助。我能做到:

  

$ docker container create --name my-django-proj -v path / to / my / proj:/ project -ti python:2.7 bash

和...

  

$ docker container start -i

和...

  

#cd / project
  #python manage.py runserver

如果以某种方式我必须执行维护任务(特别是第一次!当尚未安装任何要求时我必须手动运行包装安装 - 在此示例中为pip),我可以杀死服务器,做东西,然后重新启动服务器。

如果我不想在控制台前面并希望将其作为守护程序运行,我可以删除-i标志,添加-d标志,然后发送命令以启动和停止服务器,如下所示:

  

docker exec -it my-django-proj cd / project&& python manage.py runserver

由于主命令是bash,我知道容器是活着的,直到我停止它。

但我的问题是:我希望在bash命令中运行该命令(这两个命令),当这些命令结束时(在这种情况下:当django服务器停止时),保持bash alive 所以容器仍然可以运行,可以交互式地或通过docker exec执行更多任务。

简要说明:我知道如何手动执行此操作 - 如何自动执行此操作?

修改我发现我可以使用bash "cd /project ; python manage.py runserver ; bash"。如果没有第二个bash过程,有没有办法做到这一点?

0 个答案:

没有答案