最近我一直在处理Docker和Django,我决定为Django制作一个dev容器,而不是把我的系统搞得一团糟。我已经开始工作了,但我想知道这种情况的“原因”。
我在Docker网站上学习了这教程,最后一切都正常了。我不明白,为什么我们做docker-compose run web django-admin startproject composeexample,而不是把django-admin startproject composeexample放在Dockerfile或compose文件中?
编辑:这是我用有限的码头知识尝试过的:在不同的码头文件中,我尝试过.CMD django-admin startproject django-tests,CMD ['django-admin startproject django-tests']和我试过..。command: django-admin startproject django-tests
我尝试了这两种方法,但这都行不通,它构建了映像,但是没有创建django项目。我得到一个manage.py not found错误。我觉得这个项目应该在映像中,而不必在docker-compose run命令的末尾运行。
那么,我们为什么要这样做,为什么不把它放在Dockerfile中呢?
发布于 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 .之前的目录
$ ls
docker-compose.yml Dockerfile requirements.txt及之后:
$ ls
composeexample docker-compose.yml Dockerfile manage.py requirements.txt运行该命令将为我们创建composeexample目录树和manage.py文件。
这是因为在volume文件中进行了docker-compose.yml配置:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code它将当前目录(.)挂载为容器内的/code。同时,Dockerfile使/code成为当前工作目录:
WORKDIR /code因此,当我们运行startproject命令时,文件是在容器内的/code中创建的,容器对应于主机上的本地目录。
发布于 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,也可以在容器中(它必须正在运行)进行操作。
docker exec -it <mycontainer> bash并查看项目所在的文件夹(如果在的话)
https://stackoverflow.com/questions/66111242
复制相似问题