2015-10-20 10 views
5

Ich baue 2 dockers, ein docker mit apache, ein docker mit php5, und ich benutze docker-komponieren um zu starten.php docker link apache docker

apache2 Dockerfile in Directoy apache2:

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

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

und test.php:

<?php 
phpinfo(); 
?> 

php5 Dorckerfile im Verzeichnis php:

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

Docker-compose.yml:

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

php5: 
    build: ./php 
    container_name: php 

dann laufe ich:

docker-compose up 

apache2-Server erfolgreich gestartet. Dann greife ich auf diesen Server durch http://server_ip, dann ich Index debian.But, wenn ich http://server_ip/test.php zugreifen, nur diese auftreten:

<?php 
phpinfo(); 
?> 

php einfach nicht work.and ich weiß nicht, warum.

+1

PHP und Apache jetzt in zwei verschiedenen Containern leben und können nur über Web-Calls/Links/Datenaustausch miteinander interagieren, aber nicht, indem sie sich einfach gegenseitig anrufen. Vielleicht möchten Sie einen kombinierten php5/apache-Container erstellen und sicherstellen, dass Sie das php5-Modul verwenden. –

+0

@WolfgangFahl was meinst du "interagieren über Web-Calls/Links/Datenaustausch"? Ich kann es nicht verstehen. – xina1i

+0

Sie können die separaten Container für Apache und PHP verwenden, aber Sie müssen die 'php-fpm' verwenden, die auf einem Port ausgeführt werden, und dann müssen Sie' php-fpm' in Ihrer Apache-Konfigurationsdatei konfigurieren. –

Antwort

1

Ich würde sagen, es ist nicht möglich, separate Container für PHP als Apache-Modul zu betreiben. Ich schätze, das meinte Wolfgang.

Wenn Sie Apache und PHP in zwei verschiedene Container trennen möchten, müssen Sie PHP als fpm ausführen.
Werfen Sie einen Blick hier für Inspiration: How to correctly link php-fpm and Nginx Docker containers together?

Wenn Sie als Apache und PHP ausführen müssen apache_mod einen kombinierten Behälter wie folgt verwenden: https://github.com/docker-library/php/blob/fec7f537f049aafd2102202519c3ca9cb9576707/5.5/apache/Dockerfile aus: https://hub.docker.com/_/php/

4

Sie Apache und PHP mit PHP-FPM trennen . Das DocumentRoot muss jedoch auf beiden Containern bereitgestellt werden.

Apache muss sowohl lokal (innerhalb seines Containers) als auch auf den PHP-FPM-Server zugreifen können.

Ich bin derzeit auf der gleichen Arbeit, haben einen Blick auf meine Docker-compose.yml hier

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

Beide Bände (in PHP und Apache) /shared/httpd

0

auf montiert sind, wenn Sie müssen Sie Apache nicht unbedingt von PHP trennen, dann ist es vielleicht gut, mit einem offiziellen php:5.6-apache image zu gehen, der mit Apache geliefert wird.

Zum Beispiel Ihre docker-compose.yml könnte wie folgt aussehen:

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 

Oder für ein Beispiel aus der Praxis, wenn Sie auch mindestens eine der folgenden Voraussetzungen:

  • A Benutzerdefiniertes Webstammverzeichnis (für Laravel, Symfony usw.)
  • Andere Apache-Module installiert
  • Andere PHP-Erweiterungen installiert

Sie könnten etwas mehr tun, wie folgt:

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 

Und dann Dockerfile (die wir von der docker-compose.yml oben Referenz):

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