在Dockerfile中,我有
COPY . .
我想排除整个目录,例如我的node_modules目录。
像这样:
COPY [all but **/node_modules/**] .
Docker有可能吗?
在Dockerfile中,我有
COPY . .
我想排除整个目录,例如我的node_modules目录。
像这样:
COPY [all but **/node_modules/**] .
Docker有可能吗?
Answers:
.dockerignore
在docker build上下文目录中创建文件(因此,在这种情况下,很可能是node_modules的父目录),其中只有一行:
**/node_modules
尽管您可能只想:
node_modules
有关dockerignore的信息:https ://docs.docker.com/engine/reference/builder/#dockerignore-file
/config/nginx/ /config/logstash/
,我在容器bash中找到了它:ls config/ gunicorn logs logstash nginx
ls /config/
,您是否尝试将这些路径添加到您的.dockerignore中而不加引导符/
?
node_modules
在子目录中不起作用。
对于那些无法使用.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'
继续直到您拥有完整的文件名,或者只有您有把握地确定没有其他文件名的前缀为止。
COPY failed: no source files were specified
当没有以“ no”开头的文件而不是“ nod”开头的文件时,您将得到一个。
src/
将转到/var/www
并/conf/nginx.conf
转到/etc/nginx/conf.d/default.conf
。另外,您可以复制所有内容,并在RUN rm -r conf
以后复制(也不要保留源树)。我想听听是否有人有其他建议。
COPY [^node_modules]*
复制一个顶层文件即可。
就我而言,我的Dockerfile包含一个安装步骤,该步骤生成vendor
目录(与等效的PHP node_modules
)。然后,我COPY
将该目录转到最终的应用程序映像。因此,我不能把vendor
我的.dockerignore
。我的解决方案是在执行之前先删除目录composer install
(相当于的PHP npm install
)。
FROM composer AS composer
WORKDIR /app
COPY . .
RUN rm -rf vendor \
&& composer install
FROM richarvey/nginx-php-fpm
WORKDIR /var/www/html
COPY --from=composer /app .
该解决方案有效且不会使最终映像膨胀,但这并不理想,因为vendor
在构建过程中主机上的目录已复制到Docker上下文中,这会增加时间。
composer.lock
之前composer install
。如果没有锁定文件,则下次构建时可能会安装一组不同的依赖关系(供应商文件夹)。
添加.dockerignore对我有用。一个额外的点那些谁试图在Windows上的解决方案,Windows会不会让你创建.dockerignore文件(因为它在默认情况下允许创建文件开始没有。)
要以创建此类文件。在Windows上, 还包括一个结束点,例如:,.dockerignore.
然后按Enter键(前提是您已启用文件夹选项中的视图扩展选项)
.dockerignore
样