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

时间:2015-01-22 19:26:28

标签: docker

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

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

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

还有正则表达式的东西,但似乎不支持复杂的正则表达式。

^((?!Dockerfile).)*$

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

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

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:37)

如果您需要忽略除某些目录或文件以外的所有内容,并且还忽略那些允许的目录中的一些不必要的文件,则可以使用以下.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

答案 1 :(得分:27)

来自dockerfile reference

  

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

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

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

答案 2 :(得分:6)

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