【问题标题】:docker build error while copying source file to php container将源文件复制到 php 容器时出现 docker build 错误
【发布时间】:2020-11-04 09:00:03
【问题描述】:

我正在尝试在 docker 中设置我的 symfony 项目,而我正在努力构建 php 容器。 我已经把我所有的源代码放在\var\www\app\ 这是我的 docker-compose.yml 的摘录:

  php:
    build:
      context: .
      dockerfile: docker/php/Dockerfile
    volumes:
      - '/var/www/app:/var/www'
    restart: on-failure
    env_file:
      - .env
    user: 1000:1000

  nginx:
    image: nginx:1.19.0-alpine
    restart: on-failure
    volumes:
      - '/var/www/app:/var/www'
      - './docker/nginx/app.conf:/etc/nginx/conf.d/app.conf:ro'
    ports:
      - '80:80'
    depends_on:
      - php

这是 Dockerfile:

FROM composer:2.0 as composer

FROM php:7.4-fpm

RUN docker-php-ext-install pdo_mysql

RUN pecl install apcu

RUN apt-get update && \
apt-get install -y \
libzip-dev

RUN docker-php-ext-install zip
RUN docker-php-ext-enable apcu

WORKDIR /var/www

COPY --chown=1000:1000 var/www/app /var/www

RUN PATH=$PATH:/usr/src/app/vendor/bin:bin

RUN composer install --no-scripts --prefer-dist \
  && rm -rf "$(composer config cache-dir)" "$(composer config data-dir)"

这是我在尝试构建 php 容器时遇到的错误:

Step 9/11 : COPY --chown=1000:1000 var/www/app /var/www
ERROR: Service 'php' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder883740312/var/www/app: no such file or directory

我猜,问题在于它试图在 docker build 文件夹中获取文件,而不是 /var/www/app。我认为这是因为上下文,我试图改变它,但它再也找不到我的 Dockerfile。 我不知道如何解决这个问题,但我觉得这很容易......但我现在很迷茫。

谢谢!

【问题讨论】:

    标签: php docker docker-compose dockerfile


    【解决方案1】:

    您尝试在构建时复制一个文件夹,然后在运行时通过在 docker-compose 中使用 VOLUME 替换该文件夹。也许不需要音量?

    关于错误,docker 期望您的 var 文件夹与 docker-compose.yml 处于同一级别。如果不是这种情况,并且您的 var 文件夹位于 docker/php/ 中,那么您必须在 docker-compose.yml 中将其设置为上下文。

      php:
        build:
          context: docker/php
          dockerfile: Dockerfile
    

    如果 Dockerfile 在上下文中,你甚至不需要在 docker-compose.yml 中显式声明它

    【讨论】:

    • dockerfile 在上下文中,因此您的更改没有解决错误。问题不是/var 不在上下文中。关于体积,我需要公开我的源代码,并且能够在我的编辑器中进行修改,并在容器中立即报告
    • 你试过我的改变吗?仅供参考:Dockerfile 不在上下文中。路径 docker/php/Dockerfile 是。这是一个微妙但根本的区别。
    • 是的,但我仍然收到完全相同的消息
    • 如果您尝试从主机路径 /var/www/html 复制某些内容,那么这将永远无法工作。正如您所说的那样,这超出了上下文。如果这是您要尝试做的事情,那么问题是为什么您将源文件放在该位置?理想情况下,源文件和 Dockerfile 应该放在一起。
    • 嗯,它们是放在一起的。源代码在/var/www/app,docker 文件在/var/www/app/docker/php/。这就是说,您的评论让我想到了将/var/www/app 替换为./。我还不知道它是否真的有效,因为我在后面的步骤中遇到了另一个错误,但至少 COPY 不再崩溃了。感谢您的精神支持和提示!
    猜你喜欢
    • 2022-11-10
    • 2020-01-03
    • 2021-05-15
    • 1970-01-01
    • 2014-03-29
    • 2019-12-04
    • 2021-07-14
    • 1970-01-01
    相关资源
    最近更新 更多