当前位置: 首页 > 面试题库 >

关于使用docker-compose卷服务Django静态文件的困惑

秦雅逸
2023-03-14
问题内容

Docker菜鸟在这里,尝试使用Compose设置一个简单的Django项目。过,我已经在此方面取得了成功,但是这次我正在尝试一种不同的设置,但我不知道为什么它不起作用。

我有以下docker-compose.yml文件:

data:
  image: postgres:9.4
  volumes:
    - /var/lib/postgresql
  command: /bin/true

db:
  image: postgres:9.4
  restart: always
  expose:
    - "5432"
  volumes_from:
    - data

app:
  build: .
  restart: always
  env_file: .env
  expose:
    - "8000"
  links:
    - db:db
  volumes:
    - .static:/static_files

web:
  build: docker/web
  restart: always
  ports:
    - "80:80"
  links:
    - app:app
  volumes_from:
    - app

我的/ Dockerfile是:

FROM python:3.5
ENV PYTHONUNBUFFERED 1

ADD . /app
WORKDIR /app
RUN pip install -r requirements.txt
RUN SECRET_KEY=tmpkey python manage.py collectstatic --noinput

CMD gunicorn mysite.wsgi:application -b 0.0.0.0:8000

我的/ docker / web / Dockerfile是:

FROM nginx:1.9
RUN rm /etc/nginx/conf.d/default.conf
ADD default.conf /etc/nginx/conf.d/

我的/docker/web/default.conf文件是:

server {
    listen 80 default_server;

    location /static/ {
      autoindex on;
      alias /static_files/;
    }

    location / {
        proxy_pass http://app:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

docker的输出显示了安装到/ static_files中的静态文件,但是nginx为/static下的所有文件返回404。如果我查看.static文件夹(位于项目的根目录),则该目录为空(除了那里的.gitkeep文件之外)。如果运行docker-compose app run ls -la /static_files,目录为空,但是docker-compose app run ls -la /app/.static具有.gitkeep文件。显然,我对Docker和Compose误解了。对我在做什么错有任何想法吗?我的理解是RUNSECRET_KEY=tmpkey python manage.py collectstatic--noinput应该将文件写入我的本地.static文件夹,并且nginx应该看到这些文件;都没有发生。

软件版本:docker-compose版本1.7.0,内部版本0d7bf73和Docker 1.11.0版本,在OSX上内部版本4dc5990,并且docker-machine连接到云实例。


问题答案:

我仍然不清楚为什么我的原始代码不起作用,但是我可以将代码切换为使用Compose的v2格式,但我可以在服务之外定义卷。

这是我更新的docker-compose.yml文件:

version: '2'
services:
  db:
    image: postgres:9.4
    restart: always
    expose:
      - "5432"
    volumes:
      - postgres-data:/var/lib/postgresql
  app:
    build: .
    restart: always
    env_file: .env
    expose:
      - "8000"
    links:
      - db:db
    volumes:
      - static-data:/static_files
  web:
    build: docker/web
    restart: always
    ports:
      - "80:80"
    links:
      - app:app
    volumes:
      - static-data:/static_files
volumes:
  postgres-data:
    driver: local
  static-data:
    driver: local

其余的配置文件保持不变。

(可能值得注意的是,在运行此新配置之前,我删除了列出的所有现有Docker卷docker volume ls-也许这是我的实际解决方法?)



 类似资料:
  • 问题内容: 请帮助我在此docker django配置中提供静态文件。 我正在进行的项目在交付时遇到了一些问题。 管理员视图的 所有静态文件都可以正常加载,但是客户端Web视图的静态文件则抛出404 Not found错误。 这是我的 配置详细信息: 更新 这是管理员静态文件url的样子: http //developer.com : 8000/ static/admin/css/ base.cs

  • 我无法理解这句话(特别是粗体部分): 类型“指向 cv1 void 的指针”的 prvalue 可以转换为类型为“指向 cv2 T”的 prvalue,其中 T 是对象类型,cv2 是与 cv1 相同的 cv 限定或大于 cv1 的 cv 限定。如果原始指针值表示内存中某个字节的地址 A,并且 A 不满足 T 的对齐要求,则生成的指针值未指定。 我的问题是: > (的地址)指向的地址是否满足 的对

  • 我在Amazon EC2上托管我的Django项目时遇到了问题。使用Gunicorn和Nginx来托管站点,当我试图在浏览器中加载我的页面时,我会出现以下错误(摘自Javascript控制台): 我相信Nginx在查找我的静态文件时遇到了一些问题,但我不确定为什么。下面是我的Nginx配置: /var/log/nginx/access.log和cat/var/log/nginx/error.log

  • 问题内容: 有没有一种简单的方法可以关闭Django开发服务器中的静态文件缓存? 我正在使用标准命令启动服务器: 我已配置为从Django项目的目录提供静态文件。我还有一个中间件类,该类将标头设置为开发用,但是这似乎只会影响不在目录中的URL 。 问题答案: 假设您正在使用,它看起来并不像- 但是编写自己的仅调用视图,添加Cache-Control标头应该非常容易。

  • 我们先来看看最简单的本地静态文件服务配置示例: server { listen 80; server_name www.test.com; charset utf-8; root /data/www.test.com; index index.html index.htm; } 就这些?

  • 对于本地开发人员,我需要在Docker容器中装入一个不同的配置文件。使用命令行就很容易实现。是否可以从文件中的(使用创建)执行此操作?