2015-10-20 52 views
5

我構建了2個docker,一個docker與apache,一個docker與php5,並且我使用docker-compose來啓動。php docker link apache docker

的Apache2 Dockerfile在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"] 

和test.php的:

<?php 
phpinfo(); 
?> 

PHP5 Dorckerfile目錄PHP:

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訪問此服務器,然後我得到debian.But的指標,當我訪問http://server_ip/test.php,剛剛發生此:

<?php 
phpinfo(); 
?> 

PHP只是不work.And我不知道爲什麼。

+1

PHP和Apache現在生活在兩個不同的容器和只能通過網絡通話/鏈接/數據交換與彼此進行交互,而不能通過簡單地互相呼叫進行交互。您可能想要構建一個組合的php5/apache容器,並確保使用php5模塊。 –

+0

@WolfgangFahl你是什麼意思「通過網絡電話/鏈接/數據交換彼此進行交互」?我無法理解。 – xina1i

+0

您可以爲apache和php使用單獨的容器,但是您需要使用在某個端口上運行的'php-fpm',然後您需要在您的apache配置文件中配置'php-fpm'。 –

回答

1

我會說它不可能運行PHP的單獨容器作爲Apache模塊。我想這就是沃爾夫岡的意思。

如果你想在兩個不同的容器中分離apache和php,你需要運行php爲fpm。
看看這裏尋找靈感:How to correctly link php-fpm and Nginx Docker containers together?

如果你需要運行的Apache和PHP作爲apache_mod使用這樣的組合容器:https://github.com/docker-library/php/blob/fec7f537f049aafd2102202519c3ca9cb9576707/5.5/apache/Dockerfile 來自:https://hub.docker.com/_/php/

4

你可以用PHP-FPM單獨的Apache和PHP 。但是,DocumentRoot必須安裝在兩個容器上。

Apache必須能夠在本地(在其容器內)以及PHP-FPM服務器訪問文件。

我目前的工作是相同的,看看我的搬運工,compose.yml這裏

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

兩本書(在PHP和Apache)安裝到/shared/httpd

0

如果您並不是特別需要將Apache與PHP分離開來,那麼你可以使用開箱即用的Apache官方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 

或者,更現實生活中的例子,如果你還需要以下的至少一個:

  • 一自定義web根目錄(用於Laravel,Symfony等)
  • 其他Apache模塊安裝
  • 安裝其他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