首页 > 解决方案 > docker-compose 文件中的 COPY 失败

问题描述

我正在尝试在 PHP 中安装 xdebug。在构建过程中,当它到达 Dockerfile 中的 COPY 时,我收到以下错误消息。

ERROR: Service 'php' failed to build : COPY failed: file not found in build context or excluded by .dockerignore: stat docker-php-ext-xdebug.ini: file does not exist

我已确保该文件确实存在并且目录中没有 .dockerignore 文件。除非有另一个 .dockerignore 文件是全局文件。我在 Mac 上

这是我的 docker-compose.yml 文件

version: "3.7"

services:
  nginx:
    image: nginx:1.19
    ports:
      - 8080:80
    volumes:
      - ./src:/var/www/php:ro
      - ./.docker/nginx/conf.d:/etc/nginx/conf.d:ro
    depends_on:
      - php

  # PHP Service
  php:
    build: ./.docker/php
    working_dir: /var/www/php
    volumes:
      - ./src:/var/www/php
    depends_on:
      - db

  # MySQL Service
  db:
    image: mariadb:10.5-focal
    restart: always
    volumes:
      - ./mysqldata:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: laravelapp
    ports:
      - 3306:3306

  # PhpMyAdmin Service
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:5
    ports:
      - 8081:80
    environment:
      PMA_HOST: db
    depends_on:
      - db

和我的 Dockerfile 用于 php 服务

FROM php:7.4.7-fpm
ENV PHP_IDE_CONFIG="serverName=localhost"

# Install developer dependencies
RUN apt-get update -yqq && apt-get install -y git libsqlite3-dev nano libxml2-dev libicu-dev libfreetype6-dev libmcrypt-dev libjpeg62-turbo-dev libpng-dev libcurl4-gnutls-dev libbz2-dev libzip-dev libssl-dev -yqq

# Install mcrypt for development
RUN pecl install mcrypt-1.0.4 \
    && docker-php-ext-enable mcrypt

# Install xdebug for development
RUN    pecl install xdebug \
    && docker-php-ext-enable xdebug
    
#Install other php extensions
RUN    docker-php-ext-install sockets \
    && docker-php-ext-install mysqli \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install json \
    && docker-php-ext-install xml \
    && docker-php-ext-install zip \
    && docker-php-ext-install bz2

RUN docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/
RUN docker-php-ext-install gd

# Copy the configuration file into xdebug, if running phpinfo() you see the loaded file is not this one, change the path accordingly. 
COPY docker-php-ext-xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

# install composer
RUN curl --silent --show-error https://getcomposer.org/installer | php

WORKDIR /var/www/php

我不知道为什么这会失败。先感谢您。

标签: dockerdocker-compose

解决方案


您的构建上下文是./.docker/php,所以无论您在哪里运行docker-compose build,都需要一个名为.docker/php-- 的子目录存在吗?如果您打算在docker-compose其他地方寻找.docker/php,则需要删除前导./并指定绝对路径。

换句话说,${PWD}/.docker/php/docker-php-ext-xdebug.ini必须存在,或者必须替换${PWD}为所需的父目录才能查看


推荐阅读