docker 上的 Django;静态文件消失

Django on docker; Staticfiles disappearing

我正在尝试使用 docker nginx 和 gunicorn 部署我的 django 项目。
我的问题是容器中缺少我用于项目的静态文件。

在项目中:

ls staticfiles/
css  disconnected.html  images  lib  nothing.css

docker exec -it foo_web_1 /bin/sh

一起进入容器后
ls staticfiles/
admin

我的docker-撰写文件:

version: '3.7'

services:
  web:
    build:
      context: ./foo-app
      dockerfile: Dockerfile.prod
    command: gunicorn foo-app.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - static_volume:/home/foo-app/web/staticfiles
      - media_volume:/home/foo-app/web/mediafiles
    expose:
      - 8000
    env_file:
      - ./.env.prod
  nginx:
    build: ./nginx
    volumes:
      - static_volume:/home/foo-app/web/staticfiles
      - media_volume:/home/foo-app/web/mediafiles
    ports:
      - 2375:80
    depends_on:
      - web
volumes:
  postgres_data:
  static_volume:
  media_volume:

nginx.conf 文件:

upstream foo-app {
    server web:8000;
}

server {

    listen 80;

    location / {
        proxy_pass http://foo-app;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /staticfiles/ {
        alias /home/foo-app/web/staticfiles/;
    }

    location /mediafiles/ {
        alias /home/foo-app/web/mediafiles/;
    }

}

settings.py中与静态文件相关的部分:

STATIC_URL = "/staticfiles/"
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "staticfiles")
]

在我的 docker 文件中,我定义了以下内容:

ENV HOME=/home/foo-app
ENV APP_HOME=/home/foo-app/web
RUN mkdir $APP_HOME
WORKDIR $APP_HOME

后来我简单地复制了整个项目使用

COPY . $APP_HOME

所有其他文件都显示得非常好,我尝试删除并重建整个项目以避免工件无济于事。

通过将 STATIC_ROOT 与我的静态文件的位置分开,然后将 python manage.py collectstatic --no-input --clear 添加到我的启动脚本,问题得到了解决。