怎么在 Docker 中部署 Apache 虚拟主机

冷炫風刃

冷炫風刃

2026-06-15

992人浏览

原创

在 docker 中部署 apache 虚拟主机需自定义 vhosts.conf 并挂载生效,核心是通过 dockerfile 或挂载方式启用 include 指令加载虚拟主机配置,同时分别挂载各站点 documentroot 目录,并在宿主机 /etc/hosts 中映射域名。

怎么在 docker 中部署 apache 虚拟主机

在 Docker 中部署 Apache 虚拟主机,核心是让容器内的 Apache 识别并响应多个域名(或路径),关键不在“装 Apache”,而在“配好虚拟主机配置并正确挂载生效”。官方 httpd 镜像默认不启用 vhost 支持,需自定义配置文件并确保其被加载。

一、准备虚拟主机配置文件

Apache 的虚拟主机通过 <virtualhost></virtualhost> 指令块定义。你需要一个独立的配置文件(如 vhosts.conf),放在容器能读取的位置。

  • 创建本地目录结构:mkdir -p ./apache/conf && cd ./apache
  • 新建 conf/vhosts.conf,内容示例(支持两个域名):

      ServerName site-a.local
      DocumentRoot "/var/www/site-a"
      
        Require all granted
      




      ServerName site-b.local
      DocumentRoot "/var/www/site-b"
      
        Require all granted
      

  • 注意:ServerName 是逻辑标识,实际访问时需在宿主机 /etc/hosts 中映射到容器 IP(如 127.0.0.1 site-a.local site-b.local

二、挂载配置并启用 vhost 模块

官方镜像默认未加载虚拟主机相关模块,且主配置中未包含 vhosts.conf。需通过自定义 Dockerfile 或覆盖主配置实现。

Apache 2.4.62
Apache 2.4.62

PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。

下载
  • 方法 A(推荐):用 Dockerfile 构建新镜像
    新建 Dockerfile
    FROM httpd:2.4
    COPY ./conf/vhosts.conf /usr/local/apache2/conf/extra/vhosts.conf
    RUN echo "Include conf/extra/vhosts.conf" >> /usr/local/apache2/conf/httpd.conf
  • 方法 B(轻量):直接挂载修改后的主配置
    复制原始 httpd.conf,在末尾添加 Include conf/extra/vhosts.conf,再挂载:
    docker run -d -p 80:80 \
    -v $(pwd)/conf/vhosts.conf:/usr/local/apache2/conf/extra/vhosts.conf:ro \
    -v $(pwd)/httpd.conf:/usr/local/apache2/conf/httpd.conf:ro \
    httpd:2.4

三、挂载各站点根目录

每个 VirtualHostDocumentRoot 必须指向容器内真实路径,因此需分别挂载对应静态文件目录。

  • 创建本地站点目录:mkdir -p ./www/site-a ./www/site-b
  • 放入测试文件,例如:
    echo "<h1>Site A</h1>" > ./www/site-a/index.html
    echo "<h1>Site B</h1>" > ./www/site-b/index.html
  • 运行容器时挂载全部路径:
    docker run -d -p 80:80 \
    -v $(pwd)/conf/vhosts.conf:/usr/local/apache2/conf/extra/vhosts.conf:ro \
    -v $(pwd)/www/site-a:/var/www/site-a:ro \
    -v $(pwd)/www/site-b:/var/www/site-b:ro \
    httpd:2.4

四、验证与调试

启动后,先确认配置语法无误,再检查服务是否按预期响应不同域名。

  • 进入容器验证配置:docker exec -it httpd -t(应输出 Syntax OK
  • 查看日志快速定位问题:docker logs (常见错误包括路径不存在、权限拒绝、ServerName 未解析)
  • 浏览器访问:
    http://site-a.local 应显示 Site A
    http://site-b.local 应显示 Site B
    (前提是宿主机 /etc/hosts 已添加对应条目)

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

apache docker docker compose

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

2023.07.24

422

4

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

2025

6

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

2511

6

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

1007

7

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

2026.02.11

138

16

Docker 容器部署
Docker 容器部署

本专题整合了Docker容器部署相关内容,阅读专题下面的文章了解更多详细操作教程。

2026.03.31

183

14

Java容器化部署与Docker实践教程合集
Java容器化部署与Docker实践教程合集

聚焦 Java 应用的容器化与云原生部署,讲解 Dockerfile 编写规范与 Java 应用镜像构建、多阶段构建(Multi-stage Build)减小镜像体积、Jib / Buildpacks 免 Dockerfile 镜像构建方案、JVM 容器感知参数(-XX:MaxRAMPercentage)配置、Docker Compose 编排多服务(应用 + MySQL + Redis)、容器健康检查与资源限制、Kubernetes

2026.05.11

237

26

Go Docker与容器化部署教程合集
Go Docker与容器化部署教程合集

聚焦 Go 应用的容器化部署优势与实践,讲解 Go 静态编译特性(CGO_ENABLED=0)与 scratch / distroless 极小基础镜像构建、多阶段 Dockerfile 编写规范、交叉编译生成目标平台二进制、镜像安全扫描(Trivy)与漏洞修复、Docker Compose 本地编排开发环境、Kubernetes Deployment / Service / ConfigMap 部署 Go 服务、健康检查(Livene

2026.05.15

183

24

Hyperf 项目部署运维与性能调优手册
Hyperf 项目部署运维与性能调优手册

聚焦 Hyperf 在生产环境的落地,包含 Docker 高效打包、Swoole 配置优化、常见的内存溢出(OOM)问题排查方法以及热更新方案。

2026.05.19

325

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Docker 官方文档
Docker 官方文档

共0课时 | 0人学习

宝塔 Docker 模块使用手册
宝塔 Docker 模块使用手册

共0课时 | 0人学习