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
后续验证
- 启动容器:执行
docker-compose up -d - 访问测试:打开
http://localhost/index_hello.html(容器8080端口已映射到主机80端口),若要使用8080访问,将Apache的ports改为- '8080:8080' - 实时同步测试:修改本地
C:\html下的文件,刷新浏览器即可看到变更
内容的提问来源于stack exchange,提问作者paul mart
相关产品推荐
相关产品推荐

