Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php docker链接apache docker_Php_Apache_Docker_Docker Compose - Fatal编程技术网

php docker链接apache docker

php docker链接apache docker,php,apache,docker,docker-compose,Php,Apache,Docker,Docker Compose,我构建了2个docker,一个使用apache的docker,一个使用php5的docker,我使用docker compose开始 directoy apache2中的apache2 Dockerfile: FROM debian:latest RUN apt-get update && apt-get install -y apache2 ADD test.php /var/www/html CMD ["/usr/sbin/apache2ctl", "-D", "FOREG

我构建了2个docker,一个使用apache的docker,一个使用php5的docker,我使用docker compose开始

directoy apache2中的apache2 Dockerfile:

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();
?>
docker-compose.yml:

apache:
    build: ./apache2
    container_name: apache
    ports:
      - "80:80"
    links:
      - "php5"

php5:
    build: ./php
    container_name: php
然后我跑:

docker-compose up
apache2服务器已成功启动。然后我通过访问此服务器,然后获取debian的索引。但当我访问时,只会发生以下情况:

<?php
phpinfo();
?>


php就是不工作。我也不知道为什么。

我想说的是,不可能将php作为apache模块运行单独的容器。我想这就是沃尔夫冈的意思

如果您想在两个不同的容器中分离apache和php,则需要将php作为fpm运行。
看看这里,寻找灵感:

如果需要以apache_mod的形式运行apache和php,请使用如下组合容器:
from:

您可以使用PHP-FPM分离Apache和PHP。但是,DocumentRoot必须安装在两个容器上

Apache必须能够访问本地文件(在其容器内)以及PHP-FPM服务器

我目前正在做同样的工作,看看我的docker-compose.yml


这两个卷(在PHP和apache中)都安装在
/shared/httpd

上。如果您不特别需要将apache与PHP分开,那么您最好使用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
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
或者,对于更真实的示例,如果您还需要以下至少一项:

  • 自定义web根目录(用于Laravel、Symfony等)
  • 已安装其他Apache模块
  • 已安装其他PHP扩展
您可以做一些更像这样的事情:

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
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
中引用):


php和apache现在生活在两个不同的容器中,只能通过web调用/链接/数据交换进行交互,而不能通过简单的相互调用进行交互。您可能希望构建一个组合的php5/apache容器,并确保使用php5模块。@WolfgangFahl“通过web调用/链接/数据交换相互交互”是什么意思?我不明白。你可以为apache和php使用单独的容器,但你需要使用在某个端口上运行的
php fpm
,然后你需要在apache配置文件中配置
php fpm
。+1关于“DocumentRoot必须安装在两个容器上”的好观点我将把它添加到我提供的关于在单独容器中连接php fpm和apache的概要答案中:我在这里概述了一个apache等效于nginx设置的可能答案: