2015-10-20 8 views
5

मैं 2 डॉकर्स, अपाचे के साथ एक डॉकर, php5 के साथ एक डॉकर बनाता हूं, और मैं शुरू करने के लिए डॉकर-कंपोज़ का उपयोग करता हूं।PHP डॉकर लिंक अपाचे डॉकर

apache2 Directoy apache2 में Dockerfile:

FROM debian:latest 
RUN apt-get update && apt-get install -y apache2 
ADD test.php /var/www/html 

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] 

और test.php:

<?php 
phpinfo(); 
?> 

PHP5 निर्देशिका php में Dorckerfile:

FROM debian:latest 
RUN apt-get update && apt-get install -y php5 

डोकर-compose.yml:

apache: 
    build: ./apache2 
    container_name: apache 
    ports: 
     - "80:80" 
    links: 
     - "php5" 

php5: 
    build: ./php 
    container_name: php 

तो मैं चलाएँ:

docker-compose up 

apache2 सर्वर सफलतापूर्वक शुरू करते हैं। तब मैं http://server_ip द्वारा इस सर्वर का उपयोग, जब मैं http://server_ip/test.php का उपयोग तो मैं debian.But के सूचकांक मिलता है, सिर्फ इस होते हैं:

<?php 
phpinfo(); 
?> 

php सिर्फ मैं नहीं क्यों काम है.और नहीं है।

+1

PHP और Apache अब दो अलग-अलग कंटेनर में रहते हैं और वेब कॉल/लिंक/डेटा एक्सचेंज के माध्यम से केवल एक-दूसरे के साथ बातचीत कर सकते हैं, लेकिन एक-दूसरे को कॉल करके नहीं। आप एक संयुक्त php5/apache कंटेनर बनाना चाहते हैं और सुनिश्चित करें कि आप php5 मॉड्यूल का उपयोग करें। –

+0

@WolfgangFahl आपका क्या मतलब है "वेब कॉल/लिंक/डेटा एक्सचेंज के माध्यम से एक दूसरे के साथ बातचीत करें"? मैं समझ नहीं पा रहा हूँ – xina1i

+0

आप अपाचे और PHP के लिए अलग कंटेनरों का उपयोग कर सकते हैं लेकिन आपको कुछ पोर्ट पर चलने वाले 'php-fpm' का उपयोग करने की आवश्यकता है और फिर आपको अपनी apache कॉन्फ़िगरेशन फ़ाइल में' php-fpm' को कॉन्फ़िगर करने की आवश्यकता है। –

उत्तर

1

मैं कहूंगा कि PHP के लिए अपाचे मॉड्यूल के रूप में अलग कंटेनर चलाने के लिए संभव नहीं है। मुझे लगता है कि वोल्फगैंग का मतलब यही था।

यदि आप दो अलग-अलग कंटेनर में अपाचे और PHP को अलग करना चाहते हैं तो आपको php को fpm के रूप में चलाने की आवश्यकता है।
प्रेरणा के लिए यहाँ एक नज़र: How to correctly link php-fpm and Nginx Docker containers together?

आप अपाचे और php चलाने के लिए के रूप में apache_mod इस तरह एक संयुक्त कंटेनर का उपयोग की जरूरत है: https://github.com/docker-library/php/blob/fec7f537f049aafd2102202519c3ca9cb9576707/5.5/apache/Dockerfile से: https://hub.docker.com/_/php/

4

आप PHP-एफ पी एम के साथ अपाचे और पीएचपी अलग कर सकते हैं । हालांकि यह है कि DocumentRoot दोनों कंटेनरों पर रखा जाना चाहिए।

अपाचे स्थानीय रूप से फ़ाइलों (इसके कंटेनर के अंदर) के साथ-साथ PHP-FPM सर्वर तक पहुंचने में सक्षम होना चाहिए।

मैं वर्तमान में एक ही पर काम कर रहा हूँ, /shared/httpd

0

को रखा जाता है (PHP में और अपाचे) यहाँ

https://github.com/cytopia/devilbox/blob/master/docker-compose.yml

दोनों संस्करणों मेरी डोकर-compose.yml पर एक नजर है आप तो विशेष रूप से PHP से अपाचे को अलग करने की आवश्यकता नहीं है, तो आप एक आधिकारिक php:5.6-apache image के साथ जाने के लिए अच्छा हो सकता है जो बॉक्स के बाहर अपाचे के साथ आता है।

उदाहरण के लिए, अपने docker-compose.yml कुछ इस तरह दिख सकता है:

version: '3' 
services: 
    web: 
    image: php:5.6-apache 
    ports: 
     - "8080:80" # Map container port 80 to host machine port 8080 
    volumes: 
     - ".:/var/www/html" # Mount current folder as volume to container at /var/www/html 

या, एक और अधिक वास्तविक जीवन उदाहरण के लिए, यदि आप भी निम्न में से कम से कम एक की जरूरत है:

  • एक कस्टम वेब रूट (लैरावेल, सिम्फनी, आदि के लिए)
  • अन्य अपाचे मॉड्यूल स्थापित
  • अन्य PHP एक्सटेंशन
  • स्थापित

आप इस तरह के और अधिक कुछ करना हो सकता है:

version: '3' 
services: 
    web: 
    build: 
     context: . 
     dockerfile: Dockerfile 
    ports: 
     - "8080:80" # Map container port 80 to host machine port 8080 
    environment: 
     APACHE_DOCUMENT_ROOT: "/var/www/yourapp.com/public" 
    volumes: 
     - ".:/var/www/yourapp.com" # Mount current folder as volume to container at /var/www/yourapp.com 

और फिर अपने Dockerfile (जो हम ऊपर docker-compose.yml से संदर्भ):

FROM php:5.6-apache 

# Declare an environment variable with a default value for changing Apache's document root 
# We will override this in docker-compose.yml 
ENV APACHE_DOCUMENT_ROOT /var/www/html 

# Configure web root 
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf 
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf 

# Install additional Apache modules 
# This example: mod_rewrite & mod_headers 
RUN a2enmod rewrite headers 

# Install additional PHP extensions 
# This example: memcached & mysqli 
# For other extensions see official docs: 
# https://hub.docker.com/_/php (section: How to install more PHP extensions) 
RUN apt-get update && apt-get install -y libmemcached-dev zlib1g-dev \ 
    && pecl install memcached-2.2.0 \ 
    && docker-php-ext-enable memcached \ 
    && docker-php-ext-install -j$(nproc) mysqli