Docker Compose挂载本地目录至php:5.6-apache容器失败求助
排查Docker Compose挂载本地目录后容器内为空的问题
我来帮你梳理这个挂载问题,你遇到的容器内/var/www/html为空但本地./web有内容的情况,通常是由几个常见原因导致的,咱们一步步排查:
1. 确认Docker Compose执行路径是否正确
Docker Compose里的相对路径./web是相对于你执行docker-compose up命令时所在的目录,而不是docker-compose.yml文件的路径(除非你用-f指定了yml路径)。
- 先执行
pwd查看当前终端所在目录,确认这个目录下确实存在web子目录,且里面有内容; - 如果你的
docker-compose.yml不在当前目录,需要用docker-compose -f /path/to/your/docker-compose.yml up来指定文件路径,此时./web会相对于yml文件的所在目录。
2. 检查容器挂载的实际路径
通过Docker命令查看容器的挂载详情,确认本地路径是否正确绑定:
- 运行
docker ps找到你的apache容器ID; - 执行
docker inspect <容器ID>,在输出中找到Mounts字段,查看:Source:显示的本地路径是否和你预期的一致;Destination:是否为/var/www/html;Mode:是否为rw(读写),如果是ro可能导致无法读取,但一般不会是空目录。
如果Source路径不对,说明你执行docker-compose up的目录错误,切换到正确目录重新启动即可。
3. 排查文件权限问题
php:5.6-apache容器内的/var/www/html目录默认由www-data用户(UID=33)拥有,若本地./web目录的权限设置导致容器内用户无法读取,也可能出现看起来为空的情况:
- 在Linux/macOS上,执行
ls -ld ./web查看目录权限,确保其他用户有读取权限(比如权限为drwxr-xr-x); - 可以临时调整权限测试:
chmod -R 755 ./web,然后重启容器,看内容是否出现; - 不要直接修改本地目录的所属用户为33(除非你明确知道后果),避免影响本地使用。
4. 清理旧的Docker卷残留
如果之前你运行过这个docker-compose配置,可能存在旧的匿名卷或缓存卷覆盖了绑定挂载:
- 执行
docker-compose down -v,这个命令会停止容器并删除所有关联的卷(包括绑定挂载的临时卷); - 然后重新运行
docker-compose up,看是否能正确挂载本地内容。
验证方法
进入容器内部直接查看:
docker exec -it <容器ID> bash
然后执行ls -l /var/www/html和ls -ld /var/www/html,如果目录为空但挂载路径正确,大概率是权限问题;如果挂载路径对应的本地目录确实为空,那就是你执行命令的目录不对。
内容的提问来源于stack exchange,提问作者kaytrance
相关产品推荐
相关产品推荐

