DockerRigNore:忽略除文件和Dockerfile之外的所有内容

DockerRigNore:忽略除文件和Dockerfile之外的所有内容,docker,Docker,因此,主要目的是将一个胖jar应用程序dockerize,并将其放入Elasticbeanstalk中。问题在于上下文。如果我只需要一个jar文件,那么在docker中添加这么多上下文就有点愚蠢了 我一直在玩.dockrignore文件,但我迷路了。我试着用gitignore否定,但不起作用 * !Dockerfile */ !target/ target/* !target/*.jar regex也有这个功能,但似乎不支持复杂的regex ^((?!Dockerfile).)*$ 我还尝试

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

我一直在玩.dockrignore文件,但我迷路了。我试着用gitignore否定,但不起作用

*
!Dockerfile
*/
!target/
target/*
!target/*.jar
regex也有这个功能,但似乎不支持复杂的regex

^((?!Dockerfile).)*$
我还尝试在stackoverflow中搜索,我只找到了这两个:

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


任何帮助都将不胜感激。

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

来自:

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


因此,只包含**的行将忽略Dockerfile所在目录中的所有内容


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

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

# 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

嗨,听起来一点也不奇怪。我认为这是一个普遍的做法,但我正在寻找一种方法来做到这一点。dockerignore如果可能的话。此外,我不太喜欢mvn xml:)您可以通过将dockerfile放在子目录中并使用.dockergnore来组合这两种方法。根据文档,无论如何这样做都是好的:在大多数情况下,最好从一个空目录作为上下文开始,并将Dockerfile保存在该目录中。仅添加构建Dockerfile所需的文件。警告:不要使用根目录/,因为它会导致生成将硬盘驱动器的全部内容传输到Docker守护程序。将
**
置于文件顶部非常重要,否则将忽略排除项。Docker使用匹配的最后一条规则作为“最终”规则,因此如果
***
是最后一条,则它将匹配所有内容。因此,在第一行添加
***
,然后
!如果
foo
是您想要包含的唯一文件,则在下一行显示foo
。“因此包含**的行将忽略与Dockerfile相同目录中的所有内容”确切地说,它将忽略上下文目录中的所有内容,这可能与Dockerfile所在的位置不同。文件夹的Clamation标记对我有效!根据要求,仅将
*
放在第一行就足够了(而不是
***
)。Quote:“您可能希望指定要在上下文中包括哪些文件,而不是要排除哪些文件。为此,请指定
*
作为第一个模式,然后是一个或多个
异常模式。”。