Docker compose 由manage.py命令创建的文件不是chown';来自根用户的数据

Docker compose 由manage.py命令创建的文件不是chown';来自根用户的数据,docker-compose,cookiecutter-django,Docker Compose,Cookiecutter Django,我使用的是cookiecutter django项目模板,其中包含了漂亮的docker compose集成。但是,当我运行manage.py命令通过docker compose创建文件时,例如: sudo docker-compose -f dev.yml run django python manage.py dumpdata --output ./myapp/fixtures/data.json 该文件归root:root所有,因此我最初没有主机文件系统的写入权限。我仍在学习docker

我使用的是cookiecutter django项目模板,其中包含了漂亮的docker compose集成。但是,当我运行manage.py命令通过docker compose创建文件时,例如:

sudo docker-compose -f dev.yml run django python manage.py dumpdata --output ./myapp/fixtures/data.json
该文件归
root:root
所有,因此我最初没有主机文件系统的写入权限。我仍在学习docker compose,正在努力找到最整洁的方法,将所有创建的文件返回给本地用户

我确实尝试在dev.yml中的django服务中设置
user:
标志,如下所示

  django:
    user: $USER
但这并没有发生

我也读过关于使用

django:
  user: ${UID}
但这也失败了,并发出了警告

WARNING: The UID variable is not set. Defaulting to a blank string.
尽管
echo$UID
返回了正确的值。因此,出于某种原因,env变量没有被正确地传递,尽管我不知道如何进行调试。可能相关:

编辑:更多更新


因此,运行
docker compose-f dev.yml run django env
显示$UID不存在。我尝试在
entrypoint.sh
中分配它,但由于该文件是由root用户运行的,$UID在运行时将为0。我现在不知道如何传入用户ID。

问题:dumpdata是否可以输出到STDOUT?如果是这样,只需将docker compose-f dev.yml run django python manage.py dumpdata>data.json的结果重定向到主机上的一个文件,而不是将其保存在容器中。这将适用于像您建议的那样转储数据,是的。就是这样!迁移文件由django manage.py命令创建。看起来似乎没有简单的方法来实现这一点,而且由于它是一个不常见的用例,在创建文件之后,可能需要一个CHOWN。