【发布时间】:2019-02-22 22:13:09
【问题描述】:
我对 Nginx 和 Docker 还很陌生,目前正面临有关 docker 容器设置的问题。该设置由三个容器组成:Nginx、Django 和 Postgres。它在大多数情况下都按预期工作,但是我无法通过 Nginx 访问静态文件。
这里是 nginx.conf:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local]'
'"$request" $status $body_bytes_sent'
'"$http_referer" "$http_user_agent"'
'"$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
upstream server {
server server:8000;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name localhost;
charset utf-8;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ @rewrites;
}
location @rewrites {
rewrite ^(.+)$ /index.html last;
}
location ^~ /static/ {
autoindex on;
alias /usr/share/nginx/html/static/;
}
location ~ ^/api {
proxy_pass http://server;
}
location ~ ^/admin {
proxy_pass http://server;
}
}
}
当我访问地址 localhost:8000/static 时,我希望 Nginx 能够为 /usr/share/nginx/html/static/ 提供服务。我确实检查了 /usr/share/nginx/html/static/ 的容器 fs,并且存在静态文件。
这里是 docker-compose.yml:
version: "3"
services:
nginx:
container_name: nginx
build:
context: .
dockerfile: ./nginx/Dockerfile
image: nginx
restart: always
volumes:
- ./server/static:/usr/share/nginx/html/static
ports:
- 80:80
depends_on:
- server
command: nginx -g 'daemon off';
server:
container_name: server
build:
context: ./server
dockerfile: Dockerfile
hostname: server
ports:
- 8000:8000
volumes:
- ./server:/src/project
depends_on:
- "db"
restart: on-failure
env_file: .env
command: >
bash -c '
python manage.py makemigrations &&
python manage.py migrate &&
gunicorn project.wsgi -b 0.0.0.0:8000'
db:
container_name: postgres
image: postgres:latest
hostname: postgres
ports:
- 5432:5432
volumes:
- /var/lib/postgresql/data
文件夹./server/static 包含所有通过python manage.py collectstatic 组装的静态文件,并将它们添加到卷/usr/share/nginx/html/static。但是,当我尝试访问静态文件时,f.e.在 localhost:8000/admin,我收到有关缺少 css 文件(base.css、login.css、..)的警告。
【问题讨论】:
-
你的 Nginx 服务器设置为
listen 80;它不会在端口 8000 上处理任何请求