除了文件和 Dockerfile 之外,忽略所有内容

因此,主要目的是修改一个胖罐应用程序,并将其放入 Elasticbean}。问题在于语境。如果我所需要的只是一个 jar 文件,那么在 docker 中添加这么多上下文就有点愚蠢了。

我一直在玩。但是我迷路了。我试过用吉蒂诺否定法,但没用。

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

正则表达式也有这个问题,但似乎不支持复杂的正则表达式。

^((?!Dockerfile).)*$

我还尝试过在 stackoverflow 中搜索,只找到了以下两个:

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

如果你能帮忙,我会很感激的。

62145 次浏览

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

来自 Dockerfile 引用:

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

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

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

如果你需要忽略除了一些目录或文件以外的所有东西,并且忽略那些允许的目录中的一些不必要的文件,你可以使用下面的 .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