【发布时间】:2019-01-04 12:50:09
【问题描述】:
对不起,如果答案似乎很明显,但过去几个小时我一直在摇头。
我一直在关注多个尝试将我的应用程序 dockerize 的教程。无论我尝试了 url:port 或只是 url 的哪种组合,我都无法访问这些页面。
我对自己做错了什么一无所知。我假设如下:
- NGINX 配置完全错误。
upstream web怎么知道web是什么?我假设 docker 暴露了它,但不确定这是否正确。 - Web 容器未正确公开地址和端口?
我尝试了多重设置,但不起作用。
我有以下几点:
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/;
}
}
【问题讨论】:
-
尝试将
docker-compose.yml部分的nginxports中的"8000:8000"更改为80:8000。 -
@JonhyBeebop 如果我这样做,我会得到
ERROR: for nginx Cannot start service nginx: driver failed programming external connectivity on endpoint nginx01 Error starting userland proxy: mkdir /port/tcp:0.0.0.0:80:tcp:172.19.0.5:8000: input/output error -
@JonhyBeebop 好的 - 重新启动了一切 - 现在我得到了 502 bad gateway 。下一步怎么走?
-
尝试查看您的 nginx 容器内部并尝试找到您的
django.conf。您可以使用此docker exec -t -i container_name /bin/bash进入容器。我认为回答者 Roman 是对的,您的 nginx 容器中没有django.conf。现在它可以工作了,因为它使用默认的 nginx conf。
标签: django docker nginx gunicorn