我的目标是在Dockerfile
内运行collectstatic
命令,但当尝试通过运行重建和运行容器时
docker-compose up -d --build
在使用环境变量的行上,我遇到了来自settings.py
文件的KeyError
消息,例如:
os.environ['CELERY_BROKER']
这显然是因为容器尚未构建,所以Docker对我的.env
文件中定义的环境变量一无所知。是否有将所有变量导入Docker的命令?或者在Dockerfile中运行collectstatic
命令是个坏主意,它应该在docker compose文件中运行?或者作为CI/CD任务的一部分?
我的Dockerfile是这样的:
COPY . /app/
WORKDIR /app
RUN python manage.py collectstatic --noinput
RUN ls -la
您可能不想在构建时设置.env
中的环境变量,因为这些变量会被烘焙到容器映像中,以便与任何有权访问该映像的人共享。IMO,处理此问题的方法是将settings.py
中的os.environ['CELERY_BROKER']
实例更改为os.environ.get("CELERY_BROKER", "...")
,其中第二个参数是开发环境的合理默认值。