【发布时间】:2019-05-03 18:25:49
【问题描述】:
我在 DigitalOcean 上使用 Docker 部署了一个 Django 项目。我以this tutorial 为基础,但必须更改一些内容才能使其正常工作。当我尝试实时 SMTP 电子邮件注册时出现 500 错误(在本地工作正常),最近的问题是我无法获得有关此错误的更多信息,因为没有任何内容被写入 nginx access.log/error .log (文件总是空的)并且我能找到的任何 docker 日志都没有输出。
我已经遍及 Stack Overflow 和整个 Internet,但没有找到任何帮助。我尝试更改日志文件的权限/所有者以匹配 Nginx 工作人员,没有任何区别。我尝试在 Nginx 配置中重新指定默认日志文件(/var/log/nginx/error.log),即使看起来我不应该这样做,这也没有什么区别。
这是我在 nginx/sites-enabled 中的内容:
server {
listen 80;
server_name 134.209.172.141;
charset utf-8;
location /static {
alias /www/static;
}
location / {
proxy_pass http://web: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;
}
}
...和 nginx Dockerfile:
FROM tutum/nginx
RUN rm /etc/nginx/sites-enabled/default
COPY sites-enabled/ /etc/nginx/sites-enabled
我没有指定 nginx.conf 文件,但我注意到如果我进入 nginx 容器,在 /etc/nginx/nginx.conf 中有这样一个文件。也许这是 Docker 映像默认提供的?
这是我用于构建的 docker-compose.yml:
version: '3'
services:
web:
restart: always
build: ./web
expose:
- "8000"
links:
- postgres:postgres
- redis:redis
volumes:
- web-django:/usr/src/app
- web-static:/usr/src/app/static
env_file: .env_prod
command: /usr/local/bin/gunicorn cpm_project.wsgi:application -w 2 -b :8000
nginx:
restart: always
build: ./nginx/
ports:
- "80:80"
volumes:
- web-static:/www/static
links:
- web:web
postgres:
restart: always
image: postgres:latest
volumes:
- pgdata:/var/lib/postgresql/data/
redis:
restart: always
image: redis:latest
ports:
- "6379:6379"
volumes:
- redisdata:/data
volumes:
web-django:
web-static:
pgdata:
redisdata:
尽管我对 docker/nginx 的理解存在很大差距,但经过无数小时的修补后,我得到了一些可行的方法。但是当我将 SMTP 添加到 Django settings.py 并尝试实时测试电子邮件注册时,单击“注册”按钮后出现 500 错误;然后经过数小时的研究和尝试不同的事情并扯掉我的头发,我没有关于这个错误的更多信息,也没有任何东西看起来像是实际问题的一线线索,更不用说解决方案了。似乎让 Nginx 日志工作是一个很好的起点,但我会很感激任何清晰的。
很高兴发布任何其他可能有用的代码,不想淹没你。
【问题讨论】:
-
要将 nginx 日志放在容器之外,您需要将日志卷绑定到 nginx 容器。
-
我希望日志在 nginx 容器内。我正在努力阅读它们。
-
你是怎么做到的?请在问题中添加完整的命令行。
-
要进入容器,我运行
docker-compose exec nginx bash。当您询问完整的命令行时,您的意思是您想查看我为设置容器而运行的所有命令,还是任何特别的东西? -
我建议您从已弃用的图像切换到官方图像,明确指定访问和错误日志记录选项,检查或明确定义对日志记录目标文件夹的适当权限,然后重试。另外,恕我直言,将 1) conf 2) 日志 3) 静态文件保存在容器中并不是一个好主意。另外,请注意,删除和复制为您提供了两个层,而您可以只复制。