关于django:如何在运行docker容器时运行CMD并打开Bash?

How to run a CMD and open Bash when running a docker container?

我想弄清楚这件事有点困难。

所以我有一个基于Ubuntu图像的Dockerfile。在我的文件末尾,我有:

1
CMD django-admin startproject $PROJECTNAME

我在上一篇文章中被告知,基Ubuntu映像有一个运行/bin/bash的命令,所以我的命令实际上覆盖了这个命令(不确定这是否相关)。

我遇到的问题是如果我跑步:

1
docker run -i -t <containerid>

什么都没发生……Docker PS显示没有容器正在运行

但如果我跑:

1
docker run -i -t <containerid> /bin/bash

容器开始运行,我在shell中,docker ps显示这个容器正在运行。一切按预期工作,但我的django项目不在那里,我的理解是running/bin/bash会覆盖dockerfile中的cmd,这意味着django admin startproject永远不会运行。

从容器内部,我可以运行django admin startproject$projectname,它创建的项目没有问题,这告诉我django及其所有依赖项都已安装,并且我的环境变量正在注册。

但是,我仍然怀疑在我的dockerfile中我的cmd可能有问题,我不知道从这里到哪里去。

使用我提供的dockerfile,如果我不使用/bin/bash运行容器,容器将不会运行。

Docker图像输出:

1
2
3
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
<none>              <none>              cbec557d6362        About a minute ago   579 MB
<none>              <none>              6919c19b159a        16 hours ago

码头工人:

1
docker run -i -t cbec557d6362


我对原版发表了评论,但不管出于什么原因,现在有了新的一期。当运行/bin/bash时,它将成为在该容器中运行的命令,即bash shell。您可以在容器中执行任何您想要的操作(如创建Django项目),但是当您退出该shell时,容器仍然停止(在pid 1进程停止时,在本例中,/bin/bash退出)。

我的怀疑(我不太了解姜戈)是命令django-admin startproject $PROJECTNAME正在运行,成功完成后退出。这是PID 1,所以容器停止。这就是为什么docker ps什么也没显示的原因。

我的建议是在你的文件中使用RUN django-admin startproject $PROJECTNAME,然后使用CMD /bin/bash

构建容器,然后运行它,您应该在bash shell中,检查是否创建了项目。