You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器中Apache的PHP/HTML表单提交后无法显示数据求助

Docker容器中Apache+PHP表单提交后无法显示输入数据

我希望在Apache上部署一个简单的HTML/PHP表单,用户提交数据后能在同一页面展示结果,且整个服务运行在Docker容器中。该表单在本地localhost环境可正常工作,但在Docker容器中提交后无法显示输入的数据。我的Ubuntu系统已安装PHP,相关文件如下:

原文件内容

index.html(实际包含PHP代码)

<?php
$message = "";
if(isset($_POST['SubmitButton'])){ // Check if form was submitted
  $input = $_POST['inputText']; // Get input text
  $message = "Success! You entered: ".$input;
}
?>

<html>
<body>
<form action="" method="post">
<?php echo $message; ?>
  <input type="text" name="inputText"/>
  <input type="submit" name="SubmitButton"/>
</form>
</body>
</html>

Dockerfile

FROM webdevops/php:8.2

RUN apt update -y && apt upgrade -y
RUN apt install -y apache2
RUN apt install -y apache2-utils
RUN sudo a2enmod php8.2

WORKDIR /var/www/html
EXPOSE 80

COPY index.php /var/www/html/post
CMD ["apache2ctl", "-D", "FOREGROUND"]

问题原因及修正方案

核心问题

  1. 文件名解析限制:Apache默认不会解析.html文件中的PHP代码,你的文件包含PHP逻辑但命名为index.html,导致表单提交后PHP代码无法执行,无法生成结果内容。
  2. 文件路径错误:Dockerfile中把index.php复制到了/var/www/html/post,而Apache默认根目录是/var/www/html,访问时无法加载到你的表单文件。
  3. 镜像选择冗余:使用webdevops/php:8.2后手动安装Apache,不如直接用集成了Apache和PHP的webdevops/php:8.2-apache镜像,避免重复配置。

修正后的文件

1. 重命名文件

将原index.html改名为index.php,确保Apache能解析其中的PHP代码。

2. 修正Dockerfile

FROM webdevops/php:8.2-apache

# 该镜像已预配置Apache+PHP环境,无需手动安装
WORKDIR /var/www/html
EXPOSE 80

# 将本地index.php复制到Apache根目录
COPY index.php /var/www/html/

CMD ["apache2ctl", "-D", "FOREGROUND"]

运行步骤

  1. 构建Docker镜像:
docker build -t php-apache-form .
  1. 启动容器:
docker run -d -p 8080:80 php-apache-form
  1. 访问http://localhost:8080,提交表单即可正常显示输入数据。

内容的提问来源于stack exchange,提问作者Brian Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:52:35