Контейнер PHP Docker не обрабатывает файлы и обслуживает источник - PullRequest
0 голосов
/ 22 декабря 2018

Мой контейнер PHP Docker не обрабатывает файлы, и вместо него возвращается источник.

Вместо выполнения возвращается следующее содержимое:

<?php 
phpinfo();
?>

Вывод docker ps, чтобы показать, что оба моих контейнера работают и прослушивают соответствующие порты:

dan@server:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
e5e235112a35        php:7.2-fpm         "docker-php-entrypoi…"   23 minutes ago      Up 23 minutes       0.0.0.0:9000->9000/tcp   php
2196a8f251d3        httpd               "httpd-foreground"       5 days ago          Up 33 seconds       0.0.0.0:80->80/tcp       apache

Конфигурация Virtualhost, обратите внимание на директиву FilesMatch, передающую PHP в контейнер.

<Directory /usr/local/apache2/htdocs/default>
    Options -Indexes
    AllowOverride All
    Require all granted
</Directory>

<VirtualHost 192.168.2.35:80>

    ServerName localhost

    ServerAdmin webmaster@localhost
    DocumentRoot /usr/local/apache2/htdocs/default

    <FilesMatch \.php$>
        SetHandler "proxy:fcgi://php:9000"
    </FilesMatch>

    LogLevel trace1

    ErrorLog logs/error.default.ca.log
    CustomLog logs/access.default.ca.log combined

</VirtualHost>

Журнал Apache, показывающий, что файл обслуживается Apache.

192.168.2.30 - - [22/Dec/2018:02:40:49 +0000] "GET /default/index.php HTTP/1.1" 200 24

Редактировать

Я пытаюсь запустить Apache, PHP и MariaDB вотдельные контейнеры.Сначала у меня был запущен Apache, и теперь я пытаюсь подключить PHP.

В конце концов, я хотел добавить Nextcloud, в котором IIRC имеет контейнер без Apache, где я мог бы повторно использовать свой существующий контейнер.

Мой PHP Dockerfile

FROM php:7.2-fpm
RUN buildDeps=" \
        libmcrypt-dev \
        default-libmysqlclient-dev \
        libjpeg-dev \
        libldap2-dev \
        libmemcachedutil2 \
        libpng-dev \
        libpq-dev \
        libxml2-dev \
    " \
    && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y $buildDeps $runtimeDeps \
    && pecl install mcrypt-1.0.1 && docker-php-ext-enable mcrypt.so \
    && docker-php-ext-install bcmath bz2 calendar iconv json intl mbstring mysqli opcache pdo_mysql soap zip \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install gd \
    && apt-get purge -y --auto-remove $buildDeps \
    && rm -r /var/lib/apt/lists/*

1 Ответ

0 голосов
/ 22 декабря 2018

Во-первых, обратите внимание, что официальный образ PHP с Apache использует /var/www/html в качестве веб-корня по умолчанию (см. Документацию для образа )

Вероятно, проблема в вашем случае заключается в том, что выопределил виртуальный хост на основе IP-адреса;

<VirtualHost 192.168.2.35:80>

Когда докер запускает контейнер, контейнеру назначается случайный IP-адрес во внутренней (контейнер-контейнер) сети.Этот IP-адрес не будет совпадать с IP-адресом вашего хоста , и конфигурация вашего контейнера не должна зависеть от IP-адреса (так как он будет меняться при каждом запуске контейнера и при запускенесколько экземпляров вашего контейнера, каждый получит свой собственный IP-адрес).

Контейнеры не являются виртуальными машинами и, как правило, будут обрабатывать один сервис / веб-сайт.Предполагая, что ваш контейнер будет работать на одном веб-сайте / виртуальном хосте, в этом случае вы можете использовать конфигурацию по умолчанию:

<VirtualHost *:80>

Если вам не требуется специальная конфигурация, вы можете использовать конфигурацию по умолчанию:изображение, в этом случае это будет работать:

Создайте свой index.php

cat > ./index.php -<<'EOF'
<?php 
phpinfo();
?>
EOF

Создайте свой Dockerfile;

cat > ./Dockerfile -<<'EOF'
FROM php:7.3-apache
COPY index.php /var/www/html/
EOF

Создайте свой образ:

 docker build -t mywebsite .

Запустите свой контейнер;сопоставление порта 80 контейнера с портом 4000 на хосте;

docker run -d -p 4000:80 --name mywebsite-container mywebsite

Проверьте вывод в вашем браузере или используя curl:

curl http://localhost:4000

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css">
body {background-color: #fff; color: #222; font-family: sans-serif;}
.....
...