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"]
问题原因及修正方案
核心问题
- 文件名解析限制:Apache默认不会解析
.html文件中的PHP代码,你的文件包含PHP逻辑但命名为index.html,导致表单提交后PHP代码无法执行,无法生成结果内容。 - 文件路径错误:Dockerfile中把
index.php复制到了/var/www/html/post,而Apache默认根目录是/var/www/html,访问时无法加载到你的表单文件。 - 镜像选择冗余:使用
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"]
运行步骤
- 构建Docker镜像:
docker build -t php-apache-form .
- 启动容器:
docker run -d -p 8080:80 php-apache-form
- 访问
http://localhost:8080,提交表单即可正常显示输入数据。
内容的提问来源于stack exchange,提问作者Brian Brown
相关产品推荐
相关产品推荐

