在 WSL2 下使用 Docker YML 文件和父级上下文 (..) 构建时间太长

Using Docker YML file with context to parent (..) takes too long to build under WSL2

我有这个文件夹结构

folder_ext
folder_docker
       |---> folder_int
folder_1
folder_2
.......

我的docker文件都包含在folder_docker里面。在我的 docker-compose.yml 文件中,我设置了这样的上下文

version: '3'
services:
  nginx:
    container_name: my_nginx
    build:
      context: ..
      dockerfile: ./folder_docker/nginx/Dockerfile

Dockerfile 我从 folder_ext

复制了一些文件

COPY ./folder_ext /container_folder_ext

但在下面的某个地方我也复制了来自 folder_docker/nginx/nginx.tmp

的文件

COPY ./folder_docker/nginx/nginx.tmpl /etc/nginx/conf.d/nginx.tmpl

我还使用 .dockeringore 来忽略我不使用的文件夹和文件。

不幸的是,这个 在 WSL2(Ubuntu 发行版) 下开始构建过程需要大约 45 分钟才能开始处理第一个命令文件。我不知道为什么,但这对我来说是个大问题,因为我想制作很多建筑,而我在这个摊位上浪费了时间。

如果我使用如下所示的替代方案,其中上下文设置在 folder_ext

version: '3'
services:
  nginx:
    container_name: my_nginx
    build:
      context: ../folder_ext
      dockerfile: ../folder_docker/nginx/Dockerfile

构建几乎立即开始(~2 秒)但是我在第二次复制时收到错误消息“docker 构建上下文之外的禁止路径

COPY ../folder_docker/nginx/nginx.tmpl /etc/nginx/conf.d/nginx.tmpl

我不想仅仅为了加快构建速度而移动我的文件夹基础结构,因为它是一个遵循此文件夹结构的 git 项目。这似乎是一个 WSL2/Windows 问题,因为在生产服务器下构建时间是可以接受的。

还有其他解决方案吗?

子文件夹中的 .dockeringore 文件似乎被 IGNORED.

原来的.dockeringnore父文件是这样的。

.git
node_modules
build

在每个父文件夹中,如 folder_extfolder_1folder_2 等,它们的子文件夹也有自己的 .dockerignore 文件,例如

node_modules
build
discard 

根据上下文,docker-compose 似乎只考虑位于父目录中的第一个 .dockeringone 文件。

我解决了以下问题。我只使用了父文件夹中存在的一个 .dockeringore 文件,并删除了所有子文件夹的 .dockerignore。然后我像这样更改了唯一父 .dockeringore 文件的排除项。

.git
node_modules
build 
folder_ext/node_modules
folder_ext/build
folder_1/node_modules
folder_1/build
folder_1/discard
folder_2/node_modules
folder_2/build
folder_2/discard