PHP Docker Link Apache Docker

Я строю 2 докера, один докер с apache, один докер с php5, и я использую docker-compose для запуска.

apache2 Dockerfile в директой 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. Но когда я получаю доступ Http: //server_ip/test.php, просто произойдет это:

<?php
phpinfo();
?>

PHP просто не работает. И я не знаю почему.

7

Решение

Вы можете разделить Apache и PHP с помощью PHP-FPM. Однако DocumentRoot должен быть смонтирован на обоих контейнерах.

Apache должен иметь возможность доступа к файлам локально (внутри своего контейнера), а также к серверу PHP-FPM.

В настоящее время я работаю над тем же, посмотрите мой docker-compose.yml здесь

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

Оба тома (в PHP и apache) подключены к /shared/httpd

6

Другие решения

Я бы сказал, что невозможно запускать отдельные контейнеры для php как модуль apache. Я думаю, это то, что имел в виду Вольфганг.

Если вы хотите разделить apache и php в двух разных контейнерах, вам нужно запустить php как fpm.
Посмотрите здесь для вдохновения: Как правильно связать контейнеры php-fpm и Nginx Docker вместе?

Если вам нужно запустить apache и php как apache_mod, используйте комбинированный контейнер: https://github.com/docker-library/php/blob/fec7f537f049aafd2102202519c3ca9cb9576707/5.5/apache/Dockerfile
от: https://hub.docker.com/_/php/

1

Если вам не нужно специально отделять Apache от PHP, то вам, возможно, стоит пойти с официальным php: 5.6-apache image который поставляется с Apache из коробки.

Например, ваш 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

Или, для более реального примера, если вам также необходимо хотя бы одно из следующего:

  • Пользовательский веб-корень (для 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
0
По вопросам рекламы [email protected]