PHP项目中Docker Compose读取Dockerfile失败问题求助
问题排查与解决
错误原因
你的docker-compose.yml中build配置的路径逻辑错误:
context: ..指定了构建上下文为项目根目录(docker目录的上级目录)- 但
dockerfile: ./Dockerfile是相对于上下文路径查找文件,此时会在项目根目录下寻找Dockerfile,而你的Dockerfile实际存放在docker子目录中,因此出现文件找不到的错误。
解决方案
方案一:修正Dockerfile路径(推荐)
保持构建上下文为项目根目录,修改dockerfile的路径为相对于项目根的正确位置,同时调整挂载目录的路径(因为你在docker目录下执行docker-compose命令):
version: '3.9' services: app: build: context: .. dockerfile: ./docker/Dockerfile # 指向docker子目录下的Dockerfile image: my-custom-app-docker-image container_name: app restart: unless-stopped tty: true environment: SERVICE_NAME: app SERVICE_TAGS: dev working_dir: /var/www volumes: - ../:/var/www/app # 挂载项目根目录到容器内,而非docker目录 - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini networks: - app-network
方案二:调整构建上下文为docker目录
如果希望保持dockerfile: ./Dockerfile的写法,可以将构建上下文改为当前docker目录,但需注意:若你的Dockerfile需要复制项目根目录的文件(如业务代码),这种方式会限制访问范围(Docker无法读取构建上下文外的文件),仅适合Dockerfile无需依赖项目根文件的场景:
version: '3.9' services: app: build: context: . # 上下文改为当前docker目录 dockerfile: ./Dockerfile image: my-custom-app-docker-image container_name: app restart: unless-stopped tty: true environment: SERVICE_NAME: app SERVICE_TAGS: dev working_dir: /var/www volumes: - ../:/var/www/app # 仍需挂载项目根目录 - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini networks: - app-network
验证步骤
- 进入项目的
docker目录 - 执行
docker-compose build --no-cache重新构建镜像,确保修改生效 - 再执行
docker-compose up启动服务
内容的提问来源于stack exchange,提问作者realtebo
相关产品推荐
相关产品推荐

