You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复EC2上Docker化Django应用运行cities_light的mkdir权限错误

报错原因

django-cookiecutter 生产环境Docker镜像默认使用非root权限的普通用户运行Django进程,该用户默认没有Python依赖安装目录(/usr/local/lib/python3.9/site-packages/)的写入权限。而django-cities-light默认会将下载的地理源数据存储到自身依赖包路径下的data目录,创建目录时触发权限不足报错。

解决方法

推荐按优先级选择以下方案:

  • 方案1(最安全,推荐长期使用)
    在Django项目配置文件settings.py中新增配置,自定义cities-light的数据存储路径到项目可写目录:

    import os
    CITIES_LIGHT_DATA_DIR = "/app/data/cities_light"
    

    然后在项目的生产Dockerfile中新增两行,提前创建目录并赋予运行用户权限(默认运行用户为appuser,如果自定义过用户请替换为对应的用户名):

    RUN mkdir -p /app/data/cities_light
    RUN chown -R appuser:appuser /app/data/cities_light
    

    重新构建镜像后再执行导入命令即可。

  • 方案2(适合一次性导入操作,无需修改镜像)
    执行导入命令时临时指定root用户运行容器,导入完成后容器会自动销毁,不会影响服务日常运行的权限规则:

    docker-compose -f production.yml run --rm --user root django python manage.py cities_light
    
  • 方案3(适合需要频繁更新地理数据的场景)
    直接在Dockerfile中给cities-light的默认数据目录赋予运行用户权限:

    RUN mkdir -p /usr/local/lib/python3.9/site-packages/cities_light/data
    RUN chown -R appuser:appuser /usr/local/lib/python3.9/site-packages/cities_light/data
    

    重新构建镜像后执行导入命令即可。

内容的提问来源于stack exchange,提问作者Dorin.D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:15:02