如何使用.dockerignore文件排除子目录

74
我想在使用.dockerignore文件时排除一个子目录,但我不知道语法应该是什么,也没有任何示例。
我有一个子目录vendor/bundle
我已经在.dockerignore文件中放置了vendor/bundlevendor/bundle//vendor/bundle,但它们似乎都不起作用。
(此外,.dockerignore文件被找到了,但只是无效。)

你尝试过完整的路径吗?例如/abc/def/vendor/bundle之类的路径? - user2915097
好的,忘记我说的话吧,如果目录vendor在你的.dockerignoreDockerfile所在的目录中,那么只需要使用vendor/bundle就可以了。这里有一个例子:https://github.com/docker/docker/blob/master/.dockerignore - user2915097
2
无论如何,这份文档很糟糕,缺乏正确和不正确的.gitignore示例。 - user2915097
这是我目前的解决方法,但它很糟糕:按相反的顺序(每行一个)放入所有可能的变体:vendor/bundle/*/*/*/*/*/*/*/* vendor/bundle/*/*/*/*/*/*/* vendor/bundle/*/*/*/*/*/* vendor/bundle/*/*/*/*/* vendor/bundle/*/*/*/* vendor/bundle/*/*/* vendor/bundle/*/* vendor/bundle/* vendor/bundle - Lukas Oberhuber
这些代码行肯定是Unix格式的,因为我在Mac上。当我运行 docker build -D 时,我可以看到它正在应用这些规则。 - Lukas Oberhuber
显示剩余3条评论
3个回答

87

有一种更短、更简单的方法来编写你的 .dockerignore 文件:

vendor/bundle/**/*
vendor/bundle

9
为什么需要这两条线路?请解释一下。 - gdvalderrama
2
因为第一行与文件夹vendor/bundle的根目录及其文件不匹配。 - sebthemonster
3
为什么不仅需要vendor/bundle?这完全偏离了.dockerignore的意图和风格。 - Dagrooms
30
现在似乎只需简单使用 vendor/bundle 即可。我刚刚测试过,结果如预期一样。 - ytu

0
通过PHPStorm的帮助 - 在项目上右键单击 -> 然后您有一个选项".i*" -> 然后选择.dockerignore。它会询问您拥有什么类型的项目。在我的情况下,我搜索了Symfony PHP。然后它将自动创建一个模板,其中包含需要排除的所有文件。

完成这些步骤后,该项目似乎运行得更加高效 :)!


-59

注意:这个答案已经过时了,因为docker在这些年里有所改进。

这是我能找到的唯一答案,它起作用并解决了我的问题。

不好的地方是它非常hacky。

我在我的.dockerignore文件中加入了以下内容,以递归排除每个子目录。

vendor/bundle/*/*/*/*/*/*/*/*
vendor/bundle/*/*/*/*/*/*/*
vendor/bundle/*/*/*/*/*/*
vendor/bundle/*/*/*/*/*
vendor/bundle/*/*/*/*
vendor/bundle/*/*/*
vendor/bundle/*/*
vendor/bundle/*
vendor/bundle

这将从vendor/bundle开始往下排除所有文件和目录,深入到7个级别。(不确定顺序是否重要。)


4
查看@sebthemonster的解决方案,优化它并使其更易于理解,但不要改变原意。 - José Manuel
1
如果您使用 ** 双星号,表示每个父文件夹,或者如果您将它们放在前面或后面的任何地方,vendor 将尊重 /something/vendor 或 /something1/something2/vendor。 - pelos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接