在Dockerfile中,我有
COPY . .
我想排除整个目录,在我的例子中是node_modules目录。
就像这样:
COPY [all but **/node_modules/**] .
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
其他回答
对于一行程序解决方案,在命令提示符或项目根目录下的终端中键入以下命令。
Echo node_modules >> .dockerignore
这个命令在.dockerignore文件中追加了"node_modules"。如果.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
在docker构建上下文目录中创建文件.dockerignore(在这种情况下,很可能是node_modules的父目录),其中包含一行:
**/node_modules
尽管你可能只是想:
node_modules
dockerignore信息:https://docs.docker.com/engine/reference/builder/#dockerignore-file
添加.dockerignore对我有用。 那些在Windows上尝试此解决方案的人,Windows将不允许您创建.dockerignore文件(因为默认情况下不允许创建以。dockerignore开头的文件)。
从…开始创建这样的文件。在Windows上,还要包含一个结尾点,比如:.dockerignore。然后按回车键(前提是您已经从文件夹选项中启用了视图扩展选项)
对于那些不能使用.dockerignore文件的人(例如,如果你需要一个COPY文件而不是另一个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'
继续下去,直到您有完整的文件名,或者只有一个您确信不会有任何其他文件的前缀。
对于使用gcloud构建的用户:
Gcloud构建会忽略.dockerignore,而是寻找.gcloudignore
Use:
cp .dockerignore .gcloudignore
源