404 डॉकर+एनजीआईएनएक्स+डीजेंगो/एंगुलरजेएस के साथ स्थिर फाइलों की सेवा करते समय

मैं दिए गए कॉन्फ़िगरेशन का अनुसरण कर रहा हूं यह भंडार। मैंने अपने डॉकर कॉन्फ़िगरेशन और वास्तविक कोड को अलग - अलग रिपॉजिटरी में रखने का फैसला किया-मैं डॉकरफाइल का उपयोग करके कोड रेपो को क्लोन करूंगा । मैं एक डॉकर-मशीन (स्थानीय रूप से, वर्चुअलबॉक्स ड्राइवर का उपयोग करके) और डॉकर-कंपोज़ सेटअप का उपयोग कर रहा हूं ।

कोड रेपो की निर्देशिका संरचना मोटे तौर पर इस प्रकार है -:

|-- bower.json|-- CONTRIBUTORS|-- defsec|   |-- defsec|   |   |-- aws_settings.py|   |   |-- heroku_settings.py|   |   |-- __init__.py|   |   |-- settings.py|   |   |-- urls.py|   |   |-- views.py|   |   `-- wsgi.py|   |-- manage.py|   |-- quiz_restful|   |   |-- __init__.py|   |   |-- permissions.py|   |   |-- serializers.py|   |   |-- services.py|   |   |-- tests.py|   |   `-- views.py|   `-- users|       |-- __init__.py|       |-- models.py|       |-- permissions.py|       |-- serializers.py|       `-- views.py|-- extras|-- gulpfile.js|-- package.json|-- Procfile|-- README.md|-- requirements.txt|-- scripts|   `-- postInstall.sh|-- static|   |-- javascripts|   |   |-- app.js|   |   |-- controllers|   |   |   `-- controllers.js|   |   |-- directives|   |   |   `-- directives.js|   |   `-- services|   |       `-- services.js|   |-- partials|   |   |-- eval.html|   |   |-- exam.html|   |   |-- exam-partials|   |   |   |-- exam-view.html|   |   |   `-- sidebar.html|   |   |-- login.html|   |   `-- register.html|   `-- stylesheets|       `-- styles.css|-- templates|   |-- index.html|   |-- javascripts.html|   |-- navbar.html|   `-- stylesheets.html

docker-compose.yml फ़ाइल लगभग वैसी ही है जैसी मैंने ऊपर सूचीबद्ध रिपॉजिटरी के साथ की थी, जिसमें मामूली अंतर था जिसे मैंने माउंट किया था django वॉल्यूम पर .:/root - जिसके बिना ए [8] System error: no file or directory त्रुटि फेंकी जा रही थी । यह शायद इसलिए था क्योंकि /usr/src/app क्लोनिंग से पहले मौजूद नहीं है (संदर्भ के लिए, यह मूल फ़ाइल है) । के Dockerfile (के लिए django सेवा) में निम्नलिखित हैं -:

FROM ubuntu:14.04ENV DJANGO_CONFIGURATION Docker# First, we need to get git, and clone our repository# Additionally, get everything else here too, such as nodejs and npmRUN apt-get updateRUN apt-get install -y ca-certificates git-core ssh nodejs npm python-pip libpq-dev python-devRUN ln -s /usr/bin/nodejs /usr/bin/nodeENV HOME /root# Add custom ssh keypair - usually Bitbucket deployment keysADD ssh/ /root/.ssh/# Fix permissionsRUN chmod 600 /root/.ssh/*# Avoid first connection host confirmationRUN ssh-keyscan bitbucket.org > /root/.ssh/known_hosts# Clone the repoWORKDIR /usr/src/appRUN git clone git@bitbucket.org:username/defsec-exam-app.git# Install requirementsWORKDIR /usr/src/app/defsec-exam-appRUN pip install -r requirements.txtRUN npm install -g bowerRUN bower --allow-root install# Remember to perform migrations on your own, and also create DB when needed.# S3 Storage...# DB Settings...WORKDIR /usr/src/app/defsec-exam-app/defsecCMD ["gunicorn", "defsec.wsgi", "-w", "2", "-b", "0.0.0.0:8000", "--log-level", "-"]

और अंत में, nginx.conf स्थिर फ़ाइलों की सेवा के लिए निम्नानुसार है -:

worker_processes 1;events {    worker_connections 1024;}http {    server {        listen 80;        server_name example.org;        access_log /dev/stdout;        error_log /dev/stdout info;        location /static/ {            alias /usr/src/app/defsec-exam-app/static;        }        location /static/javascripts/ {          default_type text/javascript;          alias /usr/src/app/defsec-exam-app/static/javascripts/;        }        location /static/stylesheets/ {          default_type text/css;          alias /usr/src/app/defsec-exam-app/static/stylesheets/;        }    location /static/bower_components/ {      alias /usr/src/app/defsec-exam-app/static/bower_components/;    }        location / {            proxy_pass http://django:8000;            proxy_set_header   Host $host;            proxy_set_header   X-Real-IP $remote_addr;            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;            proxy_set_header   X-Forwarded-Host $server_name;        }    }}

हालाँकि, मुझे स्थिर फ़ाइलों की सेवा करने के लिए नग्नेक्स नहीं मिल सकता है - उनमें से सभी एक 404 लौटाते हैं । मुझे आश्चर्य है कि अगर के बीच जोड़ने nginx और django कंटेनर सेवाएं (जैसा कि परिभाषित किया गया है docker-compose.yml) गलत था, लेकिन ऐसा नहीं लगता। मैंने भी निरीक्षण किया /etc/hosts में फ़ाइल nginx कंटेनर, लिंकिंग के लिए होस्टफाइल प्रविष्टियां बनाता है ।

172.17.0.136    151ca02e891a127.0.0.1   localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters172.17.0.134    defsecdocker_django_1 eb900ed9600c172.17.0.135    defsecdocker_nginx_1 eec99206076a172.17.0.134    django eb900ed9600c defsecdocker_django_1172.17.0.134    django_1 eb900ed9600c defsecdocker_django_1172.17.0.135    nginx eec99206076a defsecdocker_nginx_1172.17.0.135    nginx_1 eec99206076a defsecdocker_nginx_1172.17.0.116    defsecdocker_postgres_1172.17.0.134    defsecdocker_django_1172.17.0.135    defsecdocker_nginx_1.bridge172.17.0.136    defsecdocker_nginx_run_10.bridge172.17.0.135    defsecdocker_nginx_1172.17.0.136    defsecdocker_nginx_run_10172.17.0.116    defsecdocker_postgres_1.bridge172.17.0.134    defsecdocker_django_1.bridge

मुझे यकीन नहीं है कि यह सही है, क्योंकि केवल 3 कंटेनर हैं लेकिन मेजबान फ़ाइल में बहुत सारी प्रविष्टियां हैं, जिनमें से कुछ डुप्लिकेट हैं । यह प्रतिलिपि प्रस्तुत करने योग्य व्यवहार है-जब भी मैं डॉकर-कंपोज़ का उपयोग करके कंटेनर बनाता हूं और चलाता हूं तो मुझे यह सटीक फ़ाइल मिलती है । डॉकर-कंपोज़ लॉग के लिए nginx की पुष्टि 404s.

किसी भी संकेत की बहुत सराहना की जाएगी ।

ऐसा प्रतीत होता है कि डॉकर-कंपोज़ कॉन्फ़िगरेशन सही नहीं था । नग्नेक्स ने उन 404 को फेंकने का कारण यह था कि इसकी कोई पहुंच नहीं थी /usr/src/app/defsec-exam-app/static.

यहाँ सही डॉकर-कंपोज़ कॉन्फ़िगरेशन है -:

# Nginxnginx:    build: ./nginx    volumes_from:        - django    links:        - django    ports:        - "80:80"# This defines a service for the Django app# Will include the Angular frontenddjango:    build: .    volumes:        - .:/root        - /usr/src/app    expose:        - "8000"    links:        - postgres# This defines a service for the Postgres databasepostgres:    image: postgres:latest

volumes_from डीजेंगो सेवा से वॉल्यूम प्राप्त करता है । और मैंने उजागर किया है usr/src/app एक मात्रा के रूप में । यह चाल करने लगता है । मैं सुझावों के लिए खुला हूँ, यदि कोई हो!

इसके अतिरिक्त, यहां नया एनजीआईएनएक्स कॉन्फ़िगरेशन है -:

worker_processes 1;events {    worker_connections 1024;}http {    server {        listen 80;        server_name example.org;        access_log /dev/stdout;        error_log /dev/stdout info;        location /static/ {            alias /usr/src/app/defsec-exam-app/static;        }        location /static/javascripts/ {          default_type text/javascript;          alias /usr/src/app/defsec-exam-app/static/javascripts/;        }        location /static/stylesheets/ {          default_type text/css;          alias /usr/src/app/defsec-exam-app/static/stylesheets/;        }    location /static/bower_components/ {      types {        text/css css;        text/javascript js;      }      alias /usr/src/app/defsec-exam-app/static/bower_components/;    }    location /static/partials/ {      types {        text/html html;      }      alias /usr/src/app/defsec-exam-app/static/partials/;    }    location /static/admin/ {          alias /usr/src/app/defsec-exam-app/static/admin/;    }    location /static/admin/css {      default_type text/css;      alias /usr/src/app/defsec-exam-app/static/admin/css;    }    location /static/admin/js {      default_type text/javascript;      alias /usr/src/app/defsec-exam-app/static/admin/js;    }    location /static/admin/img {      types {        image/png png;        image/jpeg jpg;      }      alias /usr/src/app/defsec-exam-app/static/admin/img;    }        location / {            proxy_pass http://django:8000;            proxy_set_header   Host $host;            proxy_set_header   X-Real-IP $remote_addr;            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;            proxy_set_header   X-Forwarded-Host $server_name;        }    }}

नोट: जोड़ने के लिए किया था django के व्यवस्थापक सीएसएस/जे एस/आइएमजी के लिए गोदी श्रमिक/तैनाती भंडार अलग-अलग है, इसलिए है कि django admin ठीक से काम करता है. (एक सरल जोड़ने के लिए आदेश में django Dockerfile चाल करता है)