Windows 10下Docker容器无项目文件致Apache 403错误求助
结合你的描述和配置文件,核心问题大概率是Windows环境下主机文件没有正确同步到容器目录里,我整理了几个针对性的排查和解决方向:
检查Docker Desktop的文件共享权限
Windows环境下Docker需要获取主机磁盘的访问权限才能完成文件复制。打开Docker Desktop → 设置 → Resources → File Sharing,确保你的项目所在的磁盘(比如C盘)已经被勾选,之后重启Docker服务。如果没开启这个权限,COPY命令会静默失败,最终导致容器内的/srv/app为空。确认构建上下文与命令匹配
你是在项目根目录下执行docker-compose build的吗?Docker的COPY . /srv/app是基于docker-compose.yml所在的目录作为构建上下文的,如果你的Lumen核心文件(比如app、public、vendor这些文件夹)不在这个目录下,或者当前目录只有配置文件,那复制后的/srv/app自然是空的。可以先在主机的项目根目录执行dir(Windows命令)确认文件结构,再重新构建。排查.dockerignore文件的影响
看看项目根目录下有没有.dockerignore文件?如果里面配置了忽略当前目录(比如./)或者Lumen的核心目录,COPY命令会直接跳过这些文件。可以先把.dockerignore重命名为.dockerignore.bak,然后重新构建容器,验证文件是否能正常复制。修正Apache虚拟主机配置与模块
就算/srv/app有文件了,Lumen的入口在public目录,如果Apache的DocumentRoot没配置对,还是会出现403错误。检查你的docker/apache/vhost.conf:<VirtualHost *:80> DocumentRoot /srv/app/public <Directory /srv/app/public> AllowOverride All Require all granted DirectoryIndex index.php </Directory> </VirtualHost>另外,别忘了在Dockerfile里启用Apache的rewrite模块,否则Lumen的路由无法正常工作:
RUN a2enmod rewrite验证COPY命令的执行结果
可以临时修改Dockerfile,在COPY . /srv/app之后加一行:RUN ls -la /srv/app然后重新构建,查看构建日志里的输出。如果显示
/srv/app下有文件,说明COPY是成功的,问题可能出在Apache配置上;如果还是空的,那就要回到前面的文件共享、构建上下文环节继续排查。
内容的提问来源于stack exchange,提问作者Draake

