2014-08-31 4 views
8

मैं डॉकर के माध्यम से PHP निर्मित सर्वर (php -S localhost:8080) चलाने की कोशिश कर रहा हूं, हालांकि मैं मेजबान से साइट तक नहीं पहुंच सकता - मैं हमेशा कनेक्शन रीसेट के साथ समाप्त होता हूं।php बिल्ट-इन सर्वर के साथ डॉकर

यहाँ एक सरल Dockerfile मैं पर निर्माण:

FROM centos:centos6 

RUN rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm 
RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm 

RUN yum --enablerepo=remi,remi-php55 install -y php php-opcache php-cli php-pear php-common && yum clean all 
RUN php -r "readfile('https://getcomposer.org/installer');" | php 
RUN echo "date.timezone = Europe/Prague" >> /etc/php.ini 
RUN mv composer.phar /usr/bin/composer 
RUN php -r "eval('?>'.file_get_contents('http://backend.bolt80.com/piecrust/install'));" 
RUN mv piecrust.phar /usr/bin/chef 

CMD ["/bin/bash"] 

तो यह और भी डोकर के साथ इस सर्वर को चलाने के लिए संभव है? इसे काम करने की कोशिश करते समय, मुझे पता चला कि जब nginx स्थापित किया गया था और इस बंदरगाह पर सुनने के लिए सेट किया गया था, यह मेजबान से सुलभ है। PHP अंतर्निर्मित सर्वर होस्ट से छिपा हुआ प्रतीत होता है, इस प्रकार हालांकि किसी भी अनुरोध की सेवा करने में सक्षम नहीं है।

कोई भी इस काम को सफल बनाने में सफल रहा था?

+0

आप अपने कंटेनर कैसे शुरू कर रहे हैं? – Behe

+2

'डॉकर रन-एट -80 8080: 8080 कंटेनर/बिन/बैश' और फिर मैं मैन्युअल रूप से सर्वर को 'php -S localhost: 8080' के साथ वांछित निर्देशिका –

+0

में प्रारंभ करता हूं ध्यान दें कि PHP का आंतरिक वेब सर्वर एकल-थ्रेडेड चलाता है और नहीं बनाया जाता है पर्यावरण जैसे किसी भी उत्पादन के लिए! – Paul

उत्तर

22

यदि डॉकर कंटेनर के भीतर से आप अपना वेबसर्वर php -S localhost:8080 से शुरू करते हैं तो वेबसर्वर केवल डॉकर कंटेनर से उत्पन्न कनेक्शन स्वीकार करेगा। , EXPOSE 8080 जोड़ने जब कंटेनर चल docker run कमांड लाइन के लिए -p 8080 जोड़ने

    अपने Dockerfile में
  • , या:

    डोकर मेजबान आप दो बदलाव करने की जरूरत से अपने वेब सर्वर के साथ संवाद करने में सक्षम होने के लिए। यह है कि आपके कंटेनर एक प्रोग्राम है जो उम्मीद बंदरगाह पर संचार 8080

  • php -S 0.0.0.0:8080 साथ वेब सर्वर शुरू तो यह भी डोकर कंटेनर खुद के बाहर से कनेक्शन स्वीकार है डोकर मेजबान बता देंगे

एक बार जब आप एक कंटेनर चल रहा है उन परिवर्तनों के साथ, डॉकर होस्ट पर एक नया टर्मिनल खोलें और docker ps कमांड का उपयोग यह देखने के लिए करें कि डॉकर होस्ट पर कौन सा पोर्ट कंटेनर में पोर्ट 8080 पर भेजा गया है। उदाहरण के लिए:

$ docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS      NAMES 
fbccf4058b07  test:latest   "php -S 0.0.0.0:8080 4 minutes ago  Up 4 minutes  0.0.0.0:49153->8080/tcp sad_hawking 

डोकर मेजबान के इस उदाहरण बंदरगाह 49153 में प्रयोग की जाने वाली है। तब मान्य क्वेरी आपकी वेब सर्वर पर आप इसके साथ संवाद कर सकते हैं:

$ curl http://localhost:49153

+0

यह क्यों है कि 'localhost: 80' बाहरी दुनिया से कनेक्शन स्वीकार नहीं करेगा, लेकिन '0.0.0.0: 80' होगा? – gvlasov

+3

@ सुसेका देखें http://stackoverflow.com/questions/20778771/what-is-the-difference-between-0-0-0-0-127-0-0-1-and-localhost – Thomasleveil

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