将源文件复制到php容器时docker生成错误
我正试图在docker中设置我的symfony项目,我正在努力构建php容器。 我已将所有源代码放入将源文件复制到php容器时docker生成错误,php,docker,docker-compose,dockerfile,Php,Docker,Docker Compose,Dockerfile,我正试图在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:
\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了。
我不知道如何解决这个问题,但我觉得这是一个非常简单的问题…但我现在很迷茫
谢谢 您尝试在生成时复制文件夹,然后在运行时使用docker compose中的卷替换该文件夹。也许不需要音量 关于此错误,docker希望您的
var
文件夹与docker-compose.yml处于同一级别。如果情况并非如此,并且您的var
文件夹位于docker/php/
中,那么您必须在docker-compose.yml中将其设置为上下文
php:
build:
context: docker/php
dockerfile: Dockerfile
如果Dockerfile在上下文中,您甚至不需要在docker compose.yml中显式声明它,因为Dockerfile在上下文中,所以您的更改没有解决错误。问题不是
/var
不在上下文中。关于卷,我需要公开我的源代码,并且能够在编辑器中修改,并立即在ContainerId中得到报告。您是否尝试过我的更改?仅供参考:Dockerfile不在上下文中。docker/php/Dockerfile的路径为。这是一个微妙但基本的区别。是的,我有,但我仍然得到完全相同的消息,如果您试图从主机路径/var/www/html复制某些内容,那么这将永远不会起作用。正如你正确地说的那样,这超出了上下文。如果这是您正在尝试做的,那么问题是为什么您的源文件位于该位置?理想情况下,源文件和Dockerfile应该放在一起。嗯,它们应该放在一起。源代码位于/var/www/app
中,docker文件位于/var/www/app/docker/php/
中。也就是说,你的评论让我想到用/
取代/var/www/app
。我还不知道它是否真的有效,因为我在后面的步骤中遇到了另一个错误,但至少副本不再崩溃。感谢您的道义支持和提示!