用Docker复制,但排除



在dockerfile中,我有

COPY . .

我想排除整个目录,就我而言,node_modules目录。

类似的东西:

   COPY [all but **/node_modules/**] .

docker可以使用吗?

在您的docker构建上下文目录中创建文件 .dockerignore(在这种情况下,很可能是node_modules的父级的目录(,其中一行:

**/node_modules

尽管您可能只想:

node_modules

有关Dockerignore的信息:https://docs.docker.com/engine/reference/builder/#dockerignore-file

对于那些不能使用.dockerignore文件的人(例如,如果您需要一个副本,而不是另一个副本(:

是的,但是您需要多个复制说明。具体来说,您需要在要排除的文件名中的每个字母的副本。

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'

继续使用完整的文件名,或者只是您合理地确定不会有任何其他文件的前缀。

对于一个衬里解决方案,在project root中键入以下内容。

echo node_modules >> .dockerignore

此命令附加" node_modules"在.dockerignore文件中。如果不存在.dockerignore,它将创建一个新的。用要排除的文件夹替换 node_modules

警告:如果您是Docker生态系统的新手和/或您的项目中已经有.dockerignore文件,请在继续之前进行备份。

奖金:(如Joey Baruch指出的那样(

(To CREATE/OVERWRITE the .dockerignore file via PowerShell, which can be handled by Docker):
>> echo node_modules | Out-File -Encoding UTF8 .dockerignore

排除当前目录的node_modules

node_modules

在任何立即的子目录中排除node_modules

*/node_modules

这是官方文档

对于使用GCloud build build 的人:

gcloud build忽略.dockerignore,而是寻找.gcloudignore

使用:

cp .dockerignore .gcloudignore

添加.dockerignore对我有用。另一点尝试 Windows上的解决方案 Windows不会让您创建.dockerignore file (因为默认情况下它不允许允许创建文件开始。(

创建以此开始的文件。在Windows 上,还包括一个结尾点,例如:.dockerignore.,然后命中Enter (提供您已启用了Fife tive Extension选项,可以从文件夹选项中(

我使用了多个阶段构建方法,因为我需要一个阶段才能访问该文件,但不能访问另一个阶段,因此.dockerignore不起作用:

FROM ruby AS builder
COPY app/ app/
# Do stuff with app
# remove the stuff you don't want
RUN rm -Rf app/assets
FROM ruby AS publish
# In my real version I needed the absolute path to builder WORKDIR.
# Since I'm copying from the builder stage, app/assets won't exist
# and neither will it be part of the publish image.
COPY --from=builder app app

最新更新