在 Dockerfile 中,我有
COPY . .
我想排除整个目录,在我的例子中是 node_modules 目录。
像这样的东西:
COPY [all but **/node_modules/**] .
Docker可以做到这一点吗?
在 Dockerfile 中,我有
COPY . .
我想排除整个目录,在我的例子中是 node_modules 目录。
像这样的东西:
COPY [all but **/node_modules/**] .
Docker可以做到这一点吗?
在您的 docker build 上下文目录中创建文件.dockerignore
(因此在这种情况下,很可能是 node_modules 的父目录),其中包含一行:
**/node_modules
尽管您可能只想:
node_modules
关于 dockerignore 的信息:https ://docs.docker.com/engine/reference/builder/#dockerignore-file
对于那些不能使用 .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'
继续直到你有完整的文件名,或者只是你有理由确定的前缀不会有任何其他文件。
对于 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
添加 .dockerignore 对我有用。另外一点那些在 Windows 上尝试此解决方案的人, Windows不会让您创建 .dockerignore 文件(因为默认情况下它不允许创建以 . 开头的文件。)
要创建以 . 在 Windows 上, 还包括一个结束点,例如 :.dockerignore.
并按 Enter(前提是您已从文件夹选项中启用查看扩展选项)
对于那些使用 gcloud build:
gcloud build
忽略.dockerignore
并寻找.gcloudignore
利用:
cp .dockerignore .gcloudignore