在docker CLI將上下文發送到docker守護程序之前,它會在上下文的根目錄中查找名為.dockerignore的文件。如果此文件存在,則CLI會修改上下文以排除與其中的模式匹配的文件和目錄。這有助於避免不必要地將大型文件或敏感文件和目錄發送到守護程序,並避免使用ADD或將它們添加到映像中COPY。
CLI將.dockerignore文件解釋為以換行符分隔的模式列表,類似於Unix Shell的文件組。為了匹配,上下文的根被認為是工作目錄和根目錄。例如,路徑 /foo/bar和foo/bar兩個排除命名的文件或目錄bar 的foo子目錄PATH或位於Git倉庫的根URL。兩者都不排除其他任何東西。
如果.dockerignore文件中的一行以第#1列開頭,則該行將被視為注釋,並且在CLI解釋之前將被忽略。
這是一個示例.dockerignore文件:
# comment
*/temp*
*/*/temp*
temp?
此文件導致以下生成行為:
使用Go的filepath.Match規則進行匹配 。預處理步驟使用Go的filepath.Clean除去開頭和結尾的空格,並消除.和..元素 。預處理後空白的行將被忽略。
除了Go的filepath.Match規則外,Docker還支持一個特殊的通配符字符串**,該字符串匹配任意數量的目錄(包括零個)。例如,**/*.go將排除.go 在所有目錄(包括構建上下文的根目錄)中找到的所有以結尾結尾的文件。
以!(感嘆號)開頭的行可用於排除例外。以下是.dockerignore使用此機制的示例文件:
*.md
!README.md
除 README.md上下文之外,所有.md文件都排除在外。