首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这不在Dockerfile里?

为什么这不在Dockerfile里?
EN

Stack Overflow用户
提问于 2021-02-09 00:17:40
回答 2查看 68关注 0票数 0

最近我一直在处理Docker和Django,我决定为Django制作一个dev容器,而不是把我的系统搞得一团糟。我已经开始工作了,但我想知道这种情况的“原因”。

我在Docker网站上学习了教程,最后一切都正常了。我不明白,为什么我们做docker-compose run web django-admin startproject composeexample,而不是把django-admin startproject composeexample放在Dockerfile或compose文件中?

编辑:这是我用有限的码头知识尝试过的:在不同的码头文件中,我尝试过.CMD django-admin startproject django-testsCMD ['django-admin startproject django-tests']和我试过..。command: django-admin startproject django-tests

我尝试了这两种方法,但这都行不通,它构建了映像,但是没有创建django项目。我得到一个manage.py not found错误。我觉得这个项目应该在映像中,而不必在docker-compose run命令的末尾运行。

那么,我们为什么要这样做,为什么不把它放在Dockerfile中呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-09 01:42:29

我不明白为什么我们要做docker-组合运行web django-admin startproject复合示例,而不将django-admin startproject复合示例放在docker文件或复合文件中?

因为这个命令是一个一次性初始化命令,它在主机上当前目录中创建Django项目模板。将其放入Dockerfile中是没有意义的;您将只在第一次创建项目时运行该文件一次。这就是为什么您在这里使用docker-compose run的原因,它用于短命的临时命令。

比较docker-compose run web django-admin startproject composeexample .之前的目录

代码语言:javascript
复制
$ ls
docker-compose.yml  Dockerfile  requirements.txt

及之后:

代码语言:javascript
复制
$ ls
composeexample  docker-compose.yml  Dockerfile  manage.py  requirements.txt

运行该命令将为我们创建composeexample目录树和manage.py文件。

这是因为在volume文件中进行了docker-compose.yml配置:

代码语言:javascript
复制
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code

它将当前目录(.)挂载为容器内的/code。同时,Dockerfile使/code成为当前工作目录:

代码语言:javascript
复制
WORKDIR /code

因此,当我们运行startproject命令时,文件是在容器内的/code中创建的,容器对应于主机上的本地目录。

票数 2
EN

Stack Overflow用户

发布于 2021-02-09 01:05:05

I don't get why we do docker-compose run web django-admin startproject composeexample and not put the django-admin startproject composeexample inside the Dockerfile or the compose file?

因为您不想在容器中创建一个新项目。我们希望在本地构建它,将它添加到容器中,并让容器准备好在任何部署该容器的地方都可以携带所有必要的文件。

manage.py not found

这意味着您没有将项目文件复制到容器中,或者在错误的目录中运行命令。您可以在坞-组合中执行WORKDIR,也可以在容器中(它必须正在运行)进行操作。

代码语言:javascript
复制
docker exec -it <mycontainer> bash

并查看项目所在的文件夹(如果在的话)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66111242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档