【问题标题】:Dockerignore: Ignore everything except a file and the DockerfileDockerignore:忽略除文件和 Dockerfile 之外的所有内容
【发布时间】:2018-07-26 05:25:22
【问题描述】:

所以主要目的是将胖 jar 应用程序 docker 化并放入 Elasticbeanstalk。问题在于上下文。如果我实际上只需要一个 jar 文件,那么在 docker 中添加这么多上下文有点愚蠢。

我一直在玩弄 .dockerignore 文件,但我迷路了。我尝试使用 gitignore 否定,但它不起作用。

*
!Dockerfile
*/
!target/
target/*
!target/*.jar

正则表达式也有这种情况,但似乎不支持复杂的正则表达式。

^((?!Dockerfile).)*$

我也试过在stackoverflow中搜索,找到的都是这两个:

这个问题可能与第二个问题类似,但我认为它略有不同,因为在这里,我只想在上下文中包含一个文件。

我们将不胜感激。

【问题讨论】:

  • 文件夹的感叹号对我有用!

标签: docker


【解决方案1】:

如果您需要忽略除某些目录或文件之外的所有内容,并且还需要忽略那些允许的目录中的一些不必要的文件,您可以使用以下.dockerignore 文件:

# Ignore everything
**

# Allow files and directories
!/file.txt
!/src/**

# Ignore unnecessary files inside allowed directories
# This should go after the allowed directories
**/*~
**/*.log
**/.DS_Store
**/Thumbs.db

【讨论】:

  • 根据Docker documentation,仅将* 放在第一行(而不是**)就足够了。引用:“您可能希望指定在上下文中包含哪些文件,而不是排除哪些文件。为此,请将* 指定为第一个模式,然后是一个或多个! 异常模式”。
  • 为什么是!/src/** 而不是!/src
【解决方案2】:

来自dockerfile reference

除了 Go 的 filepath.Match 规则之外,Docker 还支持一个特殊的通配符字符串 **,它可以匹配任意数量的目录(包括零)。例如,**/*.go 将排除在所有目录中找到的所有以 .go 结尾的文件,包括构建上下文的根目录。

因此,仅包含 ** 的行将忽略与 Dockerfile 相同目录中的所有内容。

正如预期的那样,感叹号可用于引用您希望发送到 docker 守护进程的任何文件。

【讨论】:

  • ** 位于文件顶部非常重要,否则将忽略排除项。 Docker 使用最后一个匹配的规则作为“最终”规则,所以如果 ** 是最后一个,它将匹配所有内容。
  • 如果foo 是您想要包含的唯一文件,请在第一行添加**,在下一行添加!foo
  • "因此,仅包含 ** 的行将忽略与 Dockerfile 相同目录中的所有内容" 确切地说,它将忽略上下文目录中的所有内容,这可能与 Dockerfile 所在的位置不同
【解决方案3】:

这听起来可能很奇怪,但如果您只需要一个 jar 文件,您可以在构建系统中创建一个包含 Dockerfile 的“docker”文件夹。当您运行构建时,让构建脚本将单个 jar 文件复制到“docker”,然后执行 docker 映像构建(从“docker”文件夹中)并在完成后推送到您的 docker 注册表。

【讨论】:

  • 嗨,这听起来一点也不奇怪。我认为这是一种普遍的做法,但如果可能的话,我正在寻找一种使用 .dockerignore 的方法。此外,我不太喜欢 mvn xml :)
  • 您可以通过将 dockerfile 放在子目录中并使用 .dockerignore 来组合这两种方法。根据文档,无论如何这样做都很好
  • Docker's documentation:在大多数情况下,最好从一个空目录作为上下文开始,并将 Dockerfile 保存在该目录中。仅添加构建 Dockerfile 所需的文件。警告:不要使用根目录 / 作为 PATH,因为它会导致构建将硬盘驱动器的全部内容传输到 Docker 守护进程。
猜你喜欢
  • 2018-09-17
  • 1970-01-01
  • 2015-05-02
  • 2022-11-28
  • 2010-11-02
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多