很抱歉,答案似乎很明显,但是过去几个小时我一直在head头。
我一直在关注多个教程,试图对我的应用程序进行docker化。无论url:port只是URL的哪种组合,我都尝试无法访问页面。
我不知道我在做什么错。我假设以下情况:
upstream web
如何知道web
是什么?我假设docker公开了它,但不确定这是否正确。我尝试了多种设置,但没有用。
我有以下内容:
Dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
ADD ./django.conf /etc/nginx/conf.d/default.conf
#COPY ./django.conf /etc/nginx/sites-available/
#RUN ln -s /etc/nginx/sites-available/django.conf /etc/nginx/sites-enabled
docker-compose.yml
version: '3'
services:
db:
image: postgres:9.6
ports:
- "5432:5432"
environment:
- POSTGRES_USER=random_user
- POSTGRES_PASSWORD=random_password
redis:
restart: always
image: redis:4.0
expose:
- "6379"
nginx:
image: nginx:1.14.0
container_name: nginx01
ports:
- "8000:8000"
volumes:
- ./code
depends_on:
- web
web:
build: .
container_name: backend-api
command: bash -c "python manage.py migrate && python manage.py collectstatic --noinput && gunicorn ops4_backend.wsgi -b 0.0.0.0:8000"
depends_on:
- db
volumes:
- ./code
expose:
- "8000"
restart: always
django.conf
upstream web {
ip_hash;
server web:8000;
}
# portal
server {
location / {
proxy_pass http://web:8000;
}
listen 8000;
server_name localhost;
location /static {
autoindex on;
alias /src/static/;
}
}
答案 0 :(得分:2)
昨天我执行的任务几乎相同,而我看到的唯一有价值的区别是您在Django容器中包含了django.conf
,而不是在nginx中。我在nginx
的{{1}}部分有以下内容:
docker-compose.yml
(其中- ./nginx:/etc/nginx/conf.d
是带有./nginx
的文件夹)
编辑:这是我的django.conf
:
docker-compose.yml
version: '3'
services:
nginx:
image: nginx
restart: always
ports:
- "80:8000"
volumes:
- ./nginx:/etc/nginx/conf.d
- ./static_cdn:/static
depends_on:
- web
db:
image: postgres
restart: always
web:
build: .
restart: always
command: bash -c "python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py collectstatic --no-input && gunicorn core.wsgi -b 0.0.0.0:8000"
volumes:
- .:/code
expose:
- "8000"
depends_on:
- db
:
django.conf
通过此设置,nginx可在upstream web {
ip_hash;
server web:8000;
}
server {
location /static/ {
alias /static/;
}
location / {
proxy_pass http://web/;
}
listen 8000;
server_name localhost;
}
或127.0.0.1:80
上使用,因为默认的80是http端口。
答案 1 :(得分:0)
有太多错误的事情,请使用this配置。然后根据您的特定需求逐步进行更改。
也请检出讨论Nginx Docker Configurations的页面,因为您的主要问题之一是您没有公开制作的django nginx conf:
ADD ./django.conf /etc/nginx/conf.d/default.conf
到nginx
容器。
因此nginx
不知道如何映射您的配置。