当前位置: 首页 > 知识库问答 >
问题:

php docker链接apache docker

顾光明
2023-03-14

我构建了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"]

和测试。php:

<?php
phpinfo();
?>

目录php中的php5 Dorckerfile:

FROM debian:latest
RUN apt-get update && apt-get install -y php5

docker撰写。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就是不起作用。我不知道为什么。

共有3个答案

陈晟睿
2023-03-14

如果您不需要特别将Apache与PHP分开,那么您可以使用Apache开箱即用的官方PHP:5.6-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

或者,对于更真实的示例,如果您还需要以下至少一项:

  • 自定义web根目录(用于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
范兴文
2023-03-14

我想说它不可能运行单独的容器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/

董霖
2023-03-14

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

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

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

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

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

 类似资料:
  • Markdown 支持两种形式的链接语法: 行内式和参考式两种形式。 不管是哪一种,链接文字都是用 [方括号] 来标记。 要建立一个行内式的链接,只要在方块括号后面紧接着圆括号并插入网址链接即可,如果你还想要加上链接的 title 文字,只要在网址后面,用双引号把 title 文字包起来即可,例如: This is [an example](http://example.com/ "Title")

  • 内部链接 <sect1 id="target"锚点 外部链接 访问“内部链接”一节 参考<xref linkend="docbook-ln"/> [54] 脚注示例

  • 主要内容:尝试一下 - 实例,HTML 超链接(链接),HTML 链接语法,实例,HTML 链接 - target 属性,实例,HTML 链接- id 属性,实例,基本的注意事项 - 有用的提示,更多实例,HTML 链接标签HTML 使用超级链接与网络上的另一个文档相连。几乎可以在所有的网页中找到链接。点击链接可以从一张页面跳转到另一张页面。 尝试一下 - 实例 HTML 链接 如何在HTML文档中创建链接。 (可以在本页底端找到更多实例) HTML 超链接(链接) HTML使用标签 <a>来设

  • 主要内容:1. :link,2. :visited,3. :hover,4. :active链接是网站的重要组成部分,几乎在每个网页上都能看到不少的链接,合理的设计链接的样式能够给网页的颜值加分。链接有四种不同的状态,分别是 link、visited、active 和 hover,可以通过以下伪类选择器来为链接的四种状态设置不同的样式: :定义普通或未访问链接的样式; :定义已经访问过链接的样式; :定义当鼠标经过或悬停在链接上时的样式; :定义点击链接时的样式。 通过上面的四个伪类选择

  • 我只是想学习,构建一个Spring HATEOAS应用程序。 我已将自定义查询添加到我的存储库中: 我得到了很好的JSON响应,但由于这是可分页的,我想要一个链接部分。。。使用上一个/下一个。 我该如何添加它? 主url提供了所有客户的列表,链接没有问题,我只想将这些链接添加到自定义可分页方法。 --编辑-- 啊! 使findAllFitered方法返回一个页面而不是列表。。。

  • 在写 linux-insides 一书的过程中,我收到了很多邮件询问关于链接器和链接器脚本的问题。所以我决定写这篇文章来介绍链接器和目标文件的链接方面的知识。 如果我们打开维基百科的 链接器 页,我们将会看到如下定义: 在计算机科学中,链接器(英文:Linker),是一个计算机程序,它将一个或多个由编译器生成的目标文件链接为一个单独的可执行文件,库文件或者另外一个目标文件 如果你曾经用 C 写过至

  • 行内式 格式为 [link text](URL 'title text')。 ① 普通链接: [Google](http://www.google.com/) Google ② 指向本地文件的链接: [icon.png](./images/icon.png) icon.png ③ 包含 'title' 的链接: [Google](http://www.google.com/ "Google")

  • HTML 使用超级链接与网络上的另一个文档相连。几乎可以在所有的网页中找到链接。点击链接可以从一张页面跳转到另一张页面。 - 实例 HTML 链接- id 属性 id属性可用于创建在一个HTML文档书签标记。 提示: 书签是不以任何特殊的方式显示,在HTML文档中是不显示的,所以对于读者来说是隐藏的。 实例 在HTML文档中插入ID:<a id="tips">有用的提示部分</a> 在HTML文档