Ich habe ein Tutorial für Django und Docker mit nginx hier http://ruddra.com/2016/08/14/docker-django-nginx-postgres/ folgen. aber ich habe eine andere VM mit einem freiliegenden Hafen von 8000, so habe ich es zu 8100 aber verließ die andere bei 8000docker komponieren Django nginx
das ist mein compose Datei:
version: '3'
services:
nginx:
image: nginx:latest
container_name: ngnix01
ports:
- "8100:8000"
volumes:
- ./code:/code
- ./config/nginx:/etc/nginx/conf.d
depends_on:
- web
web:
build: .
container_name: django01
command: bash -c "python manage.py makemigrations && python manage.py migrate && gunicorn mydjango.wsgi -b 0.0.0.0:8000"
depends_on:
- db
volumes:
- ./code:/code
expose:
- "8000"
db:
image: postgres:latest
container_name: postgres01
nginx config:
upstream web {
ip_hash;
server web:8000;
}
server {
location /static/ {
autoindex on;
alias /static/;
}
location/{
proxy_pass http://web/;
}
listen 8000;
server_name localhost;
}
und ich erhalte die Fehlermeldung, wenn ich Andockfenster-komponieren bis
attaching to postgres01, django01, ngnix01
django01 | Traceback (most recent call last):
django01 | File "manage.py", line 8, in <module>
ngnix01 | 2017/08/25 10:25:01 [emerg] 1#1: host not found in upstream "web:8000" in /etc/nginx/conf.d/django.conf:3
django01 | from django.core.management import execute_from_command_line
ngnix01 | nginx: [emerg] host not found in upstream "web:8000" in /etc/nginx/conf.d/django.conf:3
django01 | ModuleNotFoundError: No module named 'django.core'
django01 exited with code 1
, die mich denken lässt, nginx kann nicht con Takt Einhorn an Port 8000? Ich denke, meine Kompositionsdatei ist korrekt? Port auf der linken Seite ist Port zu offenbaren, Port auf der rechten Seite ist die im Container?
Oder sprechen sie bei mehreren Bildern extern miteinander?
Dank
EDIT: enthalten dockerfile
#set base image
FROM python:latest
ENV PYTHONUNBUFFERED 1
#install dependencies
RUN sed -i "s#jessie main#jessie main contrib non-free#g" /etc/apt/sources.list
RUN apt-get update -y \
&& apt-get install -y apt-utils python-software-properties libsasl2-dev python3-dev libldap2-dev libssl-dev libsnmp-dev snmp-mibs-downloader
ENV APP_USER itapp
ENV APP_ROOT /code
RUN mkdir /code;
RUN groupadd -r ${APP_USER} \
&& useradd -r -m \
--home-dir ${APP_ROOT} \
-s /usr/sbin/nologin \
-g ${APP_USER} ${APP_USER}
WORKDIR ${APP_ROOT}
RUN mkdir /config
ADD config/requirements.txt /config/
RUN pip install -r /config/requirements.txt
USER ${APP_USER}
ADD . ${APP_ROOT}
Ja, Ihre Datei korrekt zu sein scheint. Wenn Sie eine Hostadresse als Dienstname angeben, versuchen andere Dienste im Stapel, eine Verbindung mit dem offengelegten Port des Dienstes (d. H. Intern - 8000) herzustellen. Ich denke, das Problem im Django-Container verursacht Nginx den Host zu verlieren, weil Django schnell getötet wird. Docker gibt mir manchmal die Gänsehaut ... –
Haben Sie isolierte Tests für Ihre App? Sie können sie in Dockerfile ausführen, dann sehen Sie, ob bei der Erstellung eines Abbilds vor der eigentlichen Bereitstellung etwas schief geht. So etwas wie: 'RUN python manage.py test --settings = app.settings.test -v2' –