【问题标题】:Apache / PHP Docker containers are just serving the PHP source files and not executing the PHP files correctlyApache / PHP Docker 容器只是提供 PHP 源文件,并没有正确执行 PHP 文件
【发布时间】:2021-02-22 16:51:06
【问题描述】:

我正在尝试通过 Docker 在本地环境中运行 Laravel 应用程序。我想为每个服务(即 Apache、PHP、MySQL)设置单独的容器。我还想将 Composer、Artisan 和 PHPUnit 保存在单独的容器中。这比其他任何东西都更整洁。

所有容器都可以正常启动,我可以通过“docker-compose exec [container name] /bin/sh”命令访问每个容器。

我遇到的问题是公用文件夹中的 index.php 没有正确执行。 Apache 只是提供文件内容。

我不知道我做错了什么。我试过使用 Nginx 容器而不是 Apache,但我遇到了同样的问题。我猜我的 Apache 容器无法识别我的 PHP 容器。

下面有什么我做错了吗?

我的 docker-compose.yml 文件如下:

version: '3.8'

networks:
  cpw:
    name: cpw_network

services:
  apache:
    build:
      context: .
      dockerfile: apache.dockerfile
    container_name: cpw_apache
    depends_on:
      - php
      - mysql
    ports:
      - 8080:80
      - 8443:443
    volumes:
      - ./:/var/www/html
    networks:
      - cpw

  php:
    build:
      context: .
      dockerfile: php.dockerfile
    container_name: cpw_php
    volumes:
      - ./:/var/www/html
    networks:
      - cpw

  mysql:
    image: mysql:5.7.32
    container_name: cpw_mysql
    environment:
      MYSQL_DATABASE: cpw
      MYSQL_USER: laravel
      MYSQL_PASSWORD: secret
      MYSQL_ROOT_PASSWORD: secret
    networks:
      - cpw

  composer:
    image: composer:latest
    container_name: cpw_composer
    volumes:
      - ./:/var/www/html
    working_dir: /var/www/html
    networks:
      - cpw

  artisan:
    build:
      context: .
      dockerfile: php.dockerfile
    container_name: cpw_artisan
    volumes:
      - ./:/var/www/html
    working_dir: /var/www/html
    entrypoint: [ "php", "artisan" ]
    networks:
      - cpw

  phpunit:
    build:
      context: .
      dockerfile: php.dockerfile
    container_name: cpw_phpunit
    volumes:
      - ./:/var/www/html
    working_dir: /var/www/html
    entrypoint: [ "/var/www/html/vendor/bin/phpunit" ]
    networks:
      - cpw

我的apache.docker文件如下:

FROM httpd:alpine

ADD ./apache/httpd-vhosts.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf

RUN sed -i 's,#Include conf/extra/httpd-vhosts.conf,Include conf/extra/httpd-vhosts.conf,g' /usr/local/apache2/conf/httpd.conf

RUN mkdir -p /var/www/html

我的php.docker文件如下:

FROM php:7.4.12-fpm-alpine
      
RUN mkdir -p /var/www/html
        
RUN apk --no-cache add shadow && usermod -u 1000 www-data
        
RUN docker-php-ext-install pdo pdo_mysql   

我的httpd-vhosts.conf如下:

<VirtualHost *:80>
    ServerAdmin email@email.com
    DocumentRoot /var/www/html/public
    ServerName localhost
    ServerAlias localhost
    ErrorLog logs/localhost-error_log
    CustomLog logs/localhost-access_log common

    <Directory /var/www/html/public>
        AllowOverride All
        DirectoryIndex index.php index.php
        Options -Indexes
        Require all granted
    </Directory>
</VirtualHost>

任何帮助表示赞赏。

问候, 斯蒂芬

【问题讨论】:

  • 您尝试过什么调试问题?我没有看到任何配置告诉 Apache 将 PHP 容器用于任何事情
  • @NicoHaase,我尝试使用 Nginx 容器而不是 Apache。
  • 那么指示服务器使用 PHP 的 Apache 配置在哪里?
  • 只是出于好奇,这个问题和the one you posted earlier that got closed and you decided to delete 之间的确切区别是什么?如果你决定故意不遵守规则,你至少可以修改你的问题,向我们展示你已经取得了一些进展。

标签: php docker apache


【解决方案1】:

感谢@NicoHaase 为我指明了正确的方向。

这是我错过的部分:

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

更多细节在这里:

How to deploy php-fpm on docker container and apache/nginx on localhost (Ubuntu)

【讨论】:

  • 非常感谢!!我连续 3 天都在尝试解决同样的问题,我的心都快融化了!
【解决方案2】:

这也可以解决:

<FilesMatch \.(?i:php)$>
    SetHandler application/x-httpd-php
</FilesMatch>

【讨论】:

    猜你喜欢
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2017-03-30
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    相关资源
    最近更新 更多