Docker部署Apache2 HTML应用失败,求Apache/LAMPP解决方案
解决Apache2 Docker镜像构建失败的问题
首先,你遇到的pull access denied错误核心原因是Docker Hub上没有名为apache2的官方镜像——官方的Apache HTTP Server镜像使用的名称是httpd,这是第一个必须修正的点。另外,你的COPY指令路径也存在问题,需要确保应用文件被放到Apache能识别的网页根目录下。
方案一:使用官方httpd镜像(推荐)
这是最简洁且符合Docker最佳实践的Apache容器化方案,修改你的Dockerfile如下:
# 使用官方Apache httpd镜像,指定2.4.18版本 FROM httpd:2.4.18 # 设置工作目录为Apache默认网页根目录 WORKDIR /usr/local/apache2/htdocs/ # 将本地应用文件复制到容器的网页根目录 COPY . /usr/local/apache2/htdocs/
重新执行构建命令:
sudo docker build -t startapp .
启动容器的命令:
sudo docker run -d -p 8080:80 startapp
完成后就能通过http://localhost:8080访问你的HTML应用了。
方案二:基于Ubuntu 16.04构建LAMP环境
如果一定要基于Ubuntu 16.04搭建LAMP栈,可以使用下面的Dockerfile,它会完整安装Apache2、PHP及必要依赖:
FROM ubuntu:16.04 # 更新软件源并安装LAMP组件 RUN apt-get update && \ apt-get install -y apache2 php libapache2-mod-php && \ # 清理缓存以减小镜像体积 apt-get clean && \ rm -rf /var/lib/apt/lists/* # 设置Apache运行所需的环境变量,确保服务前台运行 ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_PID_FILE /var/run/apache2.pid ENV APACHE_RUN_DIR /var/run/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 # 创建Apache运行所需的目录 RUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR # 将本地应用文件复制到Apache网页根目录 COPY . /var/www/html/ # 暴露80端口 EXPOSE 80 # 启动Apache服务(前台运行,防止容器启动后立即退出) CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
构建和运行命令与方案一一致,启动后同样通过http://localhost:8080访问应用。
内容的提问来源于stack exchange,提问作者Jitendra Patwa




