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

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

验证步骤

  1. 进入项目的docker目录
  2. 执行docker-compose build --no-cache重新构建镜像,确保修改生效
  3. 再执行docker-compose up启动服务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:35:16