【问题标题】:How to run a CMD and open Bash when running a docker container?运行 docker 容器时如何运行 CMD 并打开 Bash?
【发布时间】:2016-11-07 19:47:57
【问题描述】:

我很难弄清楚这一点。

所以我有一个基于 Ubuntu 映像的 dockerfile。在我的 dockerfile 末尾,我有:

CMD django-admin startproject $PROJECTNAME

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

我遇到的问题是如果我运行:

docker run -i -t <containerid> 

什么都没有发生.. docker ps 显示没有容器正在运行

但如果我跑:

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

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

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

但是,我仍然怀疑我的 dockerfile 中的 CMD 可能存在问题,我不知道从哪里开始。

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

docker 图像的输出:

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

码头运行:

docker run -i -t cbec557d6362

【问题讨论】:

  • 两个相关的问题,你是否使用你的Dockerfile构建了一个镜像?你了解image and a container 之间的区别吗?
  • 两个问题都是。
  • 能否包含docker images 的输出和确切的docker run 命令?只是想确认您正在启动正确的图像。
  • 好的,我把它包括在内了。
  • 你能加入this room吗?那可能比 cmets 更快

标签: django bash docker dockerfile


【解决方案1】:

我对原始问题发表了评论,但无论出于何种原因,现在都有一个新问题。当你运行/bin/bash 时,变成命令在那个容器中运行,一个 bash shell。你可以在容器中做任何你想做的事情(比如创建一个 Django 项目),但是当你退出那个 shell 时,容器仍然停止(当 PID 1 进程时容器停止​​,在这种情况下,/bin/bash)退出。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-03
    • 2021-09-16
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2013-08-09
    相关资源
    最近更新 更多