2014-10-20 13 views
5

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

मैं नोड.जेएस ऐप कंटेनर ठीक स्थापित करने में सक्षम हूं और मैं अपने Dockerfile के भीतर अपाचे स्थापित और सेटअप कर सकता हूं; लेकिन मैं एक रिवर्स प्रॉक्सी स्थापित करने के लिए पूरी तरह से नया हूं, इसलिए अपाचे निश्चित रूप से शुरू होता है, यह प्रॉक्सी नहीं करता है।

मेरे Dockerfile लग रहा है कि:

# DOCKER-VERSION 1.3.0 
FROM ubuntu:12.04 

# Install and set up Apache as a reverse proxy 
RUN  apt-get -y install apache2 libapache2-mod-proxy-html 
COPY apache2.conf /etc/apache2/app.conf 
RUN  cat /etc/apache2/app.conf >> /etc/apache2/apache2.conf 
RUN  service apache2 start 

# Install and set up Node.js and bundle app 
# ...This works... 

EXPOSE 80 
CMD  ["./start-app.sh"] 

... जहां apache2.conf मैं /etc/apache2/apache2.conf को जोड़कर कर रहा हूँ है:

ServerName localhost 

LoadModule proxy_module  /usr/lib/apache2/modules/mod_proxy.so 
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so 
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so 
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so 

<Proxy *> 
    Order deny,allow 
    Allow from all 
</Proxy> 

ProxyPass  /http://localhost:9000/ 
ProxyPassReverse/http://localhost:9000/ 

मैं निम्न आदेश का उपयोग कर इस छवि को चला रहा हूँ:

docker run -p 80:80 -p 81:9000 -d IMAGE 

मुझे उम्मीद है किपर जा रहा है(यानी, रूट) अपाचे द्वारा उठाया जाएगा और कंटेनर में localhost:9000 (यानी, मेरा ऐप) पर अग्रेषित किया जाएगा। (यदि मैं http://$DOCKER_HOST:81 पर जाता हूं, तो मैं सीधे ऐप पर जाता हूं; यह साबित करने के लिए कि यह ऊपर और चल रहा है। यह काम करता है।) मुझे संदेह है कि समस्या डॉकर के साथ बिल्कुल नहीं है, लेकिन अपाचे कॉन्फ़िगरेशन है।

+0

क्या आप 9 000 के बजाय पोर्ट 80 पर अपने वेब सर्वर को उजागर करने के एकमात्र उद्देश्य के लिए अपाचे रिवर्स प्रॉक्सी का उपयोग कर रहे हैं या इसका कोई और उद्देश्य होगा? – Thomasleveil

+0

बिल्कुल। उत्पादन मशीन पर, अपाचे अन्य, असंबंधित सामान कर रहा है; मैं बस अपने कंटेनर में रिवर्स प्रॉक्सी परत डाल रहा हूं ताकि यह उत्पादन में सेटअप से मेल खा सके। – Xophmeister

+0

Pls आपके डॉकर कंटेनर – Thomasleveil

उत्तर

6

आपके डॉकरफ़ाइल में, RUN कथन उन आदेशों को परिभाषित करता है जो डॉकर छवि बनाते समय डॉकर डिमन द्वारा चलाए जाएंगे। जब आप docker run कमांड का उपयोग करते हैं तो उन आदेशों को निष्पादित नहीं किया जाएगा।

  • अपाचे सर्वर
  • NodeJS सर्वर

लेकिन CMD ["./start-app.sh"] में start-app.sh स्क्रिप्ट लगता है:

आपके मामले में आप एक डोकर छवि है कि दो प्रक्रियाओं शुरू होगा साथ आने के लिए कोशिश कर रहे हैं केवल नोडजेस सर्वर शुरू करें।

आपके पास docker run कमांड एक से अधिक प्रक्रिया शुरू नहीं हो सकता है, लेकिन आप इसे एक प्रक्रिया शुरू कर सकते हैं जो दूसरों को शुरू करेगी। वहाँ इस लक्ष्य को हासिल करने के लिए विभिन्न तरीके हैं, पर एक नज़र डालें:

लेकिन अधिक बस आप के साथ अपने CMD अनुदेश की जगह सकता है:

CMD  /bin/bash -c "service apache2 start; ./start-app.sh" 

और निकालें बेकार RUN service apache2 start लाइन।

अपने कंटेनर में, डोकर एक प्रक्रिया (/bin/bash) जो बदले में अपाचे शुरू कर देंगे और फिर ./start-app.sh चलाने शुरू कर देंगे।

+0

नोट: आप 'start-app.sh' स्क्रिप्ट – Thomasleveil

+0

के शीर्ष पर 'सेवा अपाचे 2 स्टार्ट' भी जोड़ सकते हैं, यह चाल है :) धन्यवाद ... विशेष रूप से आपके पहले पैराग्राफ ने मेरे लिए सब कुछ साफ़ कर दिया। – Xophmeister

संबंधित मुद्दे