444

在 Dockerfile 中,我有

COPY . .

我想排除整个目录,在我的例子中是 node_modules 目录。

像这样的东西:

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

Docker可以做到这一点吗?

4

6 回答 6

687

在您的 docker build 上下文目录中创建文件.dockerignore(因此在这种情况下,很可能是 node_modules 的父目录),其中包含一行:

**/node_modules

尽管您可能只想:

node_modules

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

于 2017-05-02T21:54:36.237 回答
97

对于那些不能使用 .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'

继续直到你有完整的文件名,或者只是你有理由确定的前缀不会有任何其他文件。

于 2019-02-16T16:44:03.830 回答
8

从当前目录中排除 node_modules

node_modules

排除任何直接子目录中的 node_modules

*/node_modules

这是官方文档

于 2020-06-03T03:06:20.607 回答
7

对于 ONE LINER SOLUTION ,在项目根目录的命令提示符终端中键入以下内容。

echo node_modules >> .dockerignore

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

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

奖金:(正如乔伊巴鲁克所指出的)

(To CREATE/OVERWRITE the .dockerignore file via PowerShell, which can be handled by Docker):
>> echo node_modules | Out-File -Encoding UTF8 .dockerignore
于 2020-07-20T12:56:46.390 回答
6

添加 .dockerignore 对我有用。另外一点那些在 Windows 上尝试此解决方案的人, Windows不会让您创建 .dockerignore 文件(因为默认情况下它不允许创建以 . 开头的文件。)

要创建以 . 在 Windows 上还包括一个结束点,例如 :.dockerignore.并按 Enter(前提是您已从文件夹选项中启用查看扩展选项)

于 2018-12-26T12:53:01.047 回答
4

对于那些使用 gcloud build

gcloud build忽略.dockerignore并寻找.gcloudignore

利用:

cp .dockerignore .gcloudignore

资源

于 2020-10-24T09:45:01.927 回答