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