我有这个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
这个dockerfile:
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:8000
当我运行docker-compose build
和docker-compose up -d
时,Web和Postgres服务器不会返回错误日志,只是返回成功。
目前,这三个容器正在运行,但是当我转到浏览器并导航到:localhost:8001
时,它不起作用。
它显示“连接已重新启动”错误消息。
尽管如此,Web服务器仍然不返回任何错误,所以我想我在Django应用中已正确配置了所有内容。我真的相信问题与Nginx
有关,因为当我检查Nginx log
(使用运动学)时,它仍然是空的。
为什么Nginx不听连接?
提示: 在新项目中发生此错误。我试图了解我是否有错,我正在运行一个旧项目,它可以完美运行。我试图将工作项目复制到我的新文件夹中,并删除所有现有的容器,然后尝试在新文件夹中运行该旧项目,这很令人惊讶。尽管它是可以在其他文件夹中使用的项目的精确副本,但现在无法使用...
编辑
在我的仓库中,我有一个带有config/nginx
文件的helloworld.conf
文件夹:
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
答案 0 :(得分:0)
您的nginx配置应该类似于:
upstream web {
ip_hash;
server web:8000;
}
server {
location / {
proxy_pass http://web/;
}
listen 8001;
server_name localhost;
}
答案 1 :(得分:0)
由于这类问题通常很难调试/重现,因此我创建了一个虚拟示例来仅运行Django应用并通过Nginx提供服务。您可以尝试根据需要进行调整。如果我错过了某些事情,或者做不该做的事情,请原谅我,但是我不熟悉Django框架。
用于Django容器的Dockerfile:
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code && \
pip install django
WORKDIR /code
ADD helloworld /code
docker-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。