当试图将我的static / media文件夹复制到docker上的staticfiles / medialfiles时,我试图了解我在做什么错了。
这就是我所拥有的:
settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "mediafiles")
Dockerfile
FROM python:3.6
ENV PYTHONUNBUFFERED 1
ENV C_FORCE_ROOT true
RUN mkdir /www
WORKDIR /www
COPY . /www/
RUN pip install -r requirements.txt
RUN python3 /www/manage.py collectstatic --noinput
docker-compose
# use this file only for live production
# docker-compose up -d web
version: '3'
volumes:
db_psql:
postgis-data:
esdata:
services:
web:
build: .
restart: always
container_name: django_web
command: gunicorn --bind 0.0.0.0:8080 LG__CXS4.wsgi
depends_on:
- nginx
volumes:
- .:/www
ports:
- "8080:8080"
links:
- redis
nginx:
restart: always
image: "nginx"
ports:
- "80:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./staticfiles:/static
- ./mediafiles:/media
运行docker文件时,我得到: 5355静态文件复制到'/ www / staticfiles'。,但是当我查看容器的staticfiles时,它是空的。
编辑:查看下面的答案中的ngnix配置文件,以弄清错误。
答案 0 :(得分:0)
如果要通过docker-compose调出容器,则可以删除
运行mkdir / www
WORKDIR / www
复制。 / www /
从您的Web Dockerfile中下载文件,因为您正在将卷装载到composer文件中
docker exec -it <nginx_container> bash
并确保将文件复制到/ static和/ media正确吗?答案 1 :(得分:0)
我通过容器内部的地址而不是项目地址来更改STATIC_ROOT变量的值
STATIC_ROOT ='/ webapp / static'#'。/ static'<-两者均可
然后在容器运行时在另一个命令窗口中抛出下一个命令
docker-compose exec name_service_web python manage.py collectstatic --noinput
答案 2 :(得分:0)
可疑者既不是Dockerfile,也不是docker-compose。问题出在 nginx 。它在别名中缺少www
。
有效的是:
server {
listen 80;
server_name localhost;
# serve static files
location /static/ {
alias /www/static/;
}
# serve media files
location /media/ {
alias /www/media/;
}
# pass requests for dynamic content to gunicorn
location / {
proxy_pass http://web:8080;
}
}