我有一个docker-compose.yml文件:
version: '2'
services:
nginx:
image: nginx:latest
container_name: nz01
ports:
- "8001:8000"
volumes:
- ./src:/src
- ./config/nginx:/etc/nginx/conf.d
depends_on:
- web
web:
build: .
container_name: dz01
depends_on:
- db
volumes:
- ./src:/src
expose:
- "8000"
db:
image: postgres:latest
container_name: pz01
ports:
- "5433:5432"
volumes:
- postgres_database:/var/lib/postgresql/data:Z
volumes:
postgres_database:
external: true而这个文件是:
FROM python:3.5
ENV PYTHONUNBUFFERED 1
RUN mkdir /src
RUN mkdir /static
WORKDIR /src
ADD ./src /src
RUN pip install -r requirements.pip
CMD python manage.py collectstatic --no-input;python manage.py migrate; gunicorn computationalMarketing.wsgi -b 0.0.0.0:8000web和postgres服务器不返回错误日志,只返回运行docker-compose build和docker-compose up -d时的成功。此时,这三个容器正在运行,但当我转到浏览器并导航到:localhost:8001时,它无法工作。
它显示了“连接已重新启动”错误消息。
尽管如此,web服务器仍然没有返回任何错误,所以我想我在Django应用程序中配置了所有的东西。我真的认为这个问题与Nginx有关,因为当我回顾Nginx log (使用运动学)时,它仍然是空的。
为什么Nginx不听人脉呢?
提示:这个错误发生在一个新的项目中。我试着去了解我是否有什么问题,我正在运行一个旧的项目,它运行的很好。我尝试在我的新文件夹中复制工作项目,删除所有存在的容器,然后尝试在一个新文件夹中运行这个旧项目,这是令人惊讶的。它现在不工作了,尽管它是在另一个文件夹中工作的项目的精确副本.
编辑在回购中我有一个带有helloworld.conf文件的config/nginx文件夹:
upstream web {
ip_hash;
server web:8000;
}
server {
location /static/ {
autoindex on;
alias /src/static/;
}
location / {
proxy_pass http://web/;
}
listen 8001;
server_name localhost;
}仍然有同样的错误。我没有看到任何日志错误。
Django容器日志
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
No migrations to apply.
[2018-11-05 13:00:09 +0000] [8] [INFO] Starting gunicorn 19.7.1
[2018-11-05 13:00:09 +0000] [8] [INFO] Listening at: http://0.0.0.0:8000 (8)
[2018-11-05 13:00:09 +0000] [8] [INFO] Using worker: sync
[2018-11-05 13:00:09 +0000] [11] [INFO] Booting worker with pid: 11发布于 2018-10-29 05:17:48
您的nginx配置应该类似于:
upstream web {
ip_hash;
server web:8000;
}
server {
location / {
proxy_pass http://web/;
}
listen 8001;
server_name localhost;
}发布于 2018-10-30 22:12:04
由于这类问题通常很难调试/再现,所以我创建了虚拟示例来运行Django应用程序并通过Nginx提供服务。你可以试着调整它以适应你的需要。如果我遗漏了一些东西,或者做了不该做的事情,请原谅我,但是我不熟悉Django框架。
Django容器的Dockerfile:
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code && \
pip install django
WORKDIR /code
ADD helloworld /codedocker-compose.yml:
version: '3'
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "80:80"
volumes:
- ./config/nginx:/etc/nginx/conf.d
depends_on:
- web
web:
build: .
container_name: django
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./helloworld:/code
expose:
- "8000"config/nginx/django.conf:
upstream web {
ip_hash;
server web:8000;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://web/;
}
}Django应用程序在helloworld文件夹中。
对于这个例子,通信量只是简单地传递。正确的方法是使用Unix套接字而不是端口,但我还是不熟悉Django。
https://stackoverflow.com/questions/53033664
复制相似问题