2015-10-20 22 views
5

Tôi xây dựng 2 dockers, một docker với apache, một docker với php5, và tôi sử dụng docker-compose để bắt đầu.php docker liên kết apache docker

apache2 Dockerfile trong 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"] 

và test.php:

<?php 
phpinfo(); 
?> 

php5 Dorckerfile trong php thư mục:

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 

sau đó tôi chạy: máy chủ

docker-compose up 

apache2 bắt đầu thành công. Sau đó, tôi truy cập vào máy chủ này bằng cách http://server_ip, sau đó tôi nhận được chỉ số của debian.But khi tôi truy cập http://server_ip/test.php, chỉ xảy ra này:

<?php 
phpinfo(); 
?> 

php chỉ không work.And Tôi không lý do tại sao.

+1

php và apache hiện đang sống trong hai container khác nhau và chỉ có thể tương tác với nhau thông qua các cuộc gọi web/liên kết/trao đổi dữ liệu nhưng không phải chỉ bằng cách gọi điện cho nhau. Bạn có thể muốn xây dựng một thùng chứa php5/apache kết hợp và chắc chắn rằng bạn sử dụng mô-đun php5. –

+0

@WolfgangFahl ý của bạn là "tương tác với nhau thông qua cuộc gọi/liên kết/trao đổi dữ liệu trên web"? Tôi không thể hiểu được. – xina1i

+0

Bạn có thể sử dụng các thùng chứa riêng biệt cho apache và php nhưng bạn cần sử dụng 'php-fpm' chạy trên một số cổng và sau đó bạn cần cấu hình' php-fpm' trong tệp cấu hình apache của bạn. –

Trả lời

1

Tôi sẽ nói không thể chạy các vùng chứa riêng biệt cho php làm mô-đun apache. Tôi đoán đây là ý của Wolfgang.

Nếu bạn muốn tách riêng apache và php trong hai vùng chứa khác nhau, bạn cần chạy php dưới dạng fpm.
Có một cái nhìn ở đây để tìm cảm hứng: How to correctly link php-fpm and Nginx Docker containers together?

Nếu bạn cần phải chạy apache và php như apache_mod sử dụng một container kết hợp như thế này: https://github.com/docker-library/php/blob/fec7f537f049aafd2102202519c3ca9cb9576707/5.5/apache/Dockerfile từ: https://hub.docker.com/_/php/

4

Bạn có thể tách Apache và PHP với PHP-FPM . Tuy nhiên, DocumentRoot phải được gắn trên cả hai thùng chứa.

Apache phải có khả năng truy cập các tệp cục bộ (bên trong vùng chứa của nó) cũng như máy chủ PHP-FPM.

Tôi hiện đang làm việc trên cùng, có một cái nhìn tại tôi Docker-compose.yml đây

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

Cả khối lượng (trong PHP và apache) được gắn vào /shared/httpd

0

Nếu bạn không cần phải tách riêng Apache khỏi PHP, thì bạn có thể tốt khi đi với một số php:5.6-apache image chính thức đi kèm với Apache ra khỏi hộp.

Ví dụ, docker-compose.yml của bạn có thể trông giống như thế này:

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 

Hoặc, cho một ví dụ thực tế cuộc sống nhiều hơn, nếu bạn cũng cần ít nhất một trong các cách sau:

  • Một custom web root (cho Laravel, Symfony, v.v ..)
  • Các mô-đun Apache khác được cài đặt
  • Các phần mở rộng PHP khác được cài đặt

Bạn có thể làm điều gì đó như thế này:

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 

Và sau đó Dockerfile (mà chúng tôi tham khảo từ docker-compose.yml ở trên) của bạn:

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 
Các vấn đề liên quan