php docker链接apache docker
我构建了2个docker,一个使用apache的docker,一个使用php5的docker,我使用docker compose开始 directoy apache2中的apache2 Dockerfile: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
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设置的可能答案: