在 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_ext
、folder_1
、folder_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
我有这个文件夹结构
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_ext
、folder_1
、folder_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