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

Docker Compose本地目录挂载失败:Apache未加载本地文件问题求助

问题描述

我想通过docker-compose.yml将本地C:\html目录下的index.php文件发布,目前访问localhost显示Apache默认的“It works”页面,无法加载本地目录内容。尝试使用- ./html:/var/www/html挂载也无效。目标是搭建Web开发环境,修改本地C:\html\index_hello.html后,能在http://localhost:8080/index_hello.html看到变更。

我的docker-compose.yml配置如下:

version: "3"
 
services:
 
  # --- MySQL 5.7
  #
  mysql:
    container_name: "dstack-mysql"
    image: bitnami/mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_USER=admin
      - MYSQL_PASSWORD=root
    ports:
      - '3306:3306'
  php:
    container_name: "dstack-php"
    image: bitnami/php-fpm:8.1
 
 
  # --- Apache 2.4
  #
  apache:
    container_name: "dstack-apache"
    image: bitnami/apache:2.4
    ports:
      - '80:8080'
      - '443:8443'
    depends_on:
      - php
   
  volumes:
    - C:/html:/var/www/html
  phpmyadmin:
    container_name: "dstack-phpmyadmin"
    image: bitnami/phpmyadmin:latest
    depends_on:
      - mysql
    ports:
      - '81:8080'
      - '8143:8443'
    environment:
      - DATABASE_HOST=host.docker.internal
volumes:
  dstack-mysql:
    driver: local
解决方法

你的配置存在三个核心问题,修正后即可实现需求:

1. 修正volumes缩进错误

你将volumes块写在了services层级之外,这属于全局volumes定义,不会作用到Apache服务。必须把挂载配置缩进,放到apache服务的配置内部。

2. 匹配Bitnami镜像的默认文档根目录

Bitnami的Apache镜像默认文档根目录是/app,而非/var/www/html。之前你挂载到/var/www/html,Apache根本不会读取该目录内容,这是显示默认页面的主要原因。需要将本地目录挂载到容器的/app路径。

3. 配置Apache与PHP-FPM的关联

Bitnami的Apache镜像默认未配置PHP请求转发,需添加环境变量指定PHP-FPM的服务地址,让Apache能把PHP请求交给PHP容器处理。

修正后的docker-compose.yml

version: "3"
 
services:
  mysql:
    container_name: "dstack-mysql"
    image: bitnami/mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_USER=admin
      - MYSQL_PASSWORD=root
    ports:
      - '3306:3306'
    volumes:
      - dstack-mysql:/bitnami/mysql

  php:
    container_name: "dstack-php"
    image: bitnami/php-fpm:8.1
    volumes:
      - C:/html:/app  # 挂载到PHP-FPM的工作目录,与Apache保持一致

  apache:
    container_name: "dstack-apache"
    image: bitnami/apache:2.4
    ports:
      - '80:8080'
      - '443:8443'
    depends_on:
      - php
    environment:
      - PHP_FPM_HOST=php  # 指定PHP-FPM服务名称,实现请求转发
      - PHP_FPM_PORT=9000
    volumes:
      - C:/html:/app  # 挂载到Apache默认文档根目录

  phpmyadmin:
    container_name: "dstack-phpmyadmin"
    image: bitnami/phpmyadmin:latest
    depends_on:
      - mysql
    ports:
      - '81:8080'
      - '8143:8443'
    environment:
      - DATABASE_HOST=mysql  # 直接使用mysql服务名即可,无需host.docker.internal

volumes:
  dstack-mysql:
    driver: local

后续验证

  1. 启动容器:执行docker-compose up -d
  2. 访问测试:打开http://localhost/index_hello.html(容器8080端口已映射到主机80端口),若要使用8080访问,将Apache的ports改为- '8080:8080'
  3. 实时同步测试:修改本地C:\html下的文件,刷新浏览器即可看到变更

内容的提问来源于stack exchange,提问作者paul mart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:54:21