作者:天蝎快乐公主_594 | 来源:互联网 | 2023-02-05 04:44
在Dockerfile中,我有
COPY . .
我想排除整个目录,在我的例子中,node_modules目录.
像这样的东西:
COPY [all but **/node_modules/**] .
Docker可以实现吗?
1> 小智..:
.dockerignore
在docker build context目录中创建文件(所以在这种情况下,很可能是node_modules的父目录),其中包含一行:
.dockerignore
虽然你可能只想要:
.dockerignore
有关dockerignore的信息:https://docs.docker.com/engine/reference/builder/#dockerignore-file
@SalahAdDin是的它适合你:)
只是`node_modules`在子目录中不起作用。
谢谢,所以"复制......" 我想,命令不需要改变
@SalahAdDin和你没有编写`ls/config /`的原因相同,你是否尝试将这些路径添加到你的.dockerignore而没有前导`/`?
2> 小智..:
对于那些无法使用.dockerignore文件的用户(例如,如果您需要在一个COPY中使用该文件,而在另一个中则不需要):
是的,但是您需要多个COPY说明。具体来说,您需要为要排除的文件名中的每个字母提供一个COPY。
COPY [^n]* # All files that don't start with 'n'
COPY n[^o]* # All files that start with 'n', but not 'no'
COPY no[^d]* # All files that start with 'no', but not 'nod'
继续直到您拥有完整的文件名或只有您有把握地确定没有其他文件的前缀为止。
这对目录有效吗?
3> Cameron Huds..:
就我而言,我的Dockerfile包含一个安装步骤,该步骤生成vendor
目录(与等效的PHP node_modules
)。然后,我COPY
将此目录转到最终的应用程序映像。因此,我不能把vendor
我的.dockerignore
。我的解决方案只是在执行之前删除目录composer install
(相当于的PHP npm install
)。
FROM composer AS composer
WORKDIR /app
COPY . .
RUN rm -rf composer.lock vendor \
&& composer install
FROM richarvey/nginx-php-fpm
WORKDIR /var/www/html
COPY --from=composer /app .
此解决方案有效且不会使最终映像膨胀,但这并不理想,因为vendor
在构建过程中主机上的目录被复制到Docker上下文中,这会增加时间。