【问题标题】:Docker and Django manage.pyDocker 和 Django manage.py
【发布时间】:2015-07-14 22:23:32
【问题描述】:

我正在尝试使用 Docker 和 Django 找到工作流程。目前,我正在使用the docker documentation 的基本配置。

我想直接从容器中使用manage.py startapp 来启动一个新的应用程序:

docker-compose run web ./manage.py startapp myapp

但是卷中创建的所有文件都归root用户所有,而不是我自己,所以我无法从主机编辑它们。

我的想法是避免在我的主机上安装所有要求,但也许我不应该从容器创建应用程序?

一种可能的解决方案是创建一个用户并使其具有与我的主机上的用户相同的 UID/GID,但如果我尝试在我的主机上使用其他帐户,它将无法工作...

有什么建议吗?

【问题讨论】:

  • 你应该在你的Dockerfile中添加一个USER xx,xx是一个非特权用户,你之前在你的Dockerfile中创建了一个从docs.docker.com/articles/dockerfile_best-practices中提取的内容,比如RUN groupadd -r postgres && useradd -r -g postgres postgres"
  • 一个带有 useradd 和 USER forum.ubuntu-fr.org/viewtopic.php?id=1809831 的 Dockerfile 示例
  • 之所以有效,是因为我在主机上的用户帐户与在容器中创建的用户具有相同的 UID/GID。但是,如果我在主机上使用另一个帐户,它将无法工作:/
  • 您可以将 uid gid 作为 Dockerfile 的参数

标签: django docker manage.py


【解决方案1】:

最适合我的是避免(或最小化)在容器内创建文件。

我的 Dockerfile 只会复制 requirements.txt 并安装它们; 并且容器将通过挂载的卷访问应用程序文件。

我将环境变量 PYTHONDONTWRITEBYTECODE=1 传递给容器,因此 python 不会创建 *.pyc/*.pyo 文件。

有几次我无法避免它(比如./manage.py makemigrations),之后我运行chown。 这并不理想,但由于我的情况很少发生这种情况,所以我不打扰。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多