2b1b9b
% ".containerignore" "28" "Sep 2021" "" "Container User Manuals"
2b1b9b
2b1b9b
# NAME
2b1b9b
2b1b9b
.containerignore(.dockerignore) - files to ignore buildah or podman build context directory
2b1b9b
2b1b9b
# INTRODUCTION
2b1b9b
2b1b9b
Before container engines build an image, they look for a file named .containerignore or .dockerignore in the root
2b1b9b
context directory. If one of these file exists, the CLI modifies the context to exclude files and
2b1b9b
directories that match patterns specified in the file. This avoids adding them to images using the ADD or COPY
2b1b9b
instruction.
2b1b9b
2b1b9b
The CLI interprets the .containerignore or .dockerignore file as a newline-separated list of patterns similar to
2b1b9b
the file globs of Unix shells. For the purposes of matching, the root of the context is considered to be both the
2b1b9b
working and the root directory. For example, the patterns /foo/bar and foo/bar both exclude a file or directory
2b1b9b
named bar in the foo subdirectory of PATH or in the root of the git repository located at URL. Neither excludes
2b1b9b
anything else.
2b1b9b
2b1b9b
If a line in .containerignore or .dockerignore file starts with # in column 1, then this line is considered as a
2b1b9b
comment and is ignored before interpreted by the CLI.
2b1b9b
2b1b9b
# EXAMPLES
2b1b9b
2b1b9b
Here is an example .containerignore file:
2b1b9b
2b1b9b
```
2b1b9b
# comment
2b1b9b
*/temp*
2b1b9b
*/*/temp*
2b1b9b
temp?
2b1b9b
```
2b1b9b
2b1b9b
This file causes the following build behavior:
2b1b9b
Rule 	Behavior
2b1b9b
```
2b1b9b
# comment 	Ignored.
2b1b9b
*/temp* 	Exclude files and directories whose names start with temp in any immediate subdirectory of the root.
2b1b9b
For example, the plain file /somedir/temporary.txt is excluded, as is the directory /somedir/temp.
2b1b9b
*/*/temp* 	Exclude files and directories starting with temp from any subdirectory that is two levels below the
2b1b9b
root. For example, /somedir/subdir/temporary.txt is excluded.
2b1b9b
temp? 	Exclude files and directories in the root directory whose names are a one-character extension of temp. For example, /tempa and /tempb are excluded.
2b1b9b
```
2b1b9b
Matching is done using Go’s filepath.Match rules. A preprocessing step removes leading and trailing whitespace and
2b1b9b
eliminates . and .. elements using Go’s filepath.Clean. Lines that are blank after preprocessing are ignored.
2b1b9b
2b1b9b
Beyond Go’s filepath.Match rules, Docker also supports a special wildcard string ** that matches any number of
2b1b9b
directories (including zero). For example, **/*.go will exclude all files that end with .go that are found in all
2b1b9b
directories, including the root of the build context.
2b1b9b
2b1b9b
Lines starting with ! (exclamation mark) can be used to make exceptions to exclusions. The following is an example .containerignore file that uses this mechanism:
2b1b9b
```
2b1b9b
*.md
2b1b9b
!README.md
2b1b9b
```
2b1b9b
All markdown files except README.md are excluded from the context.
2b1b9b
2b1b9b
The placement of ! exception rules influences the behavior: the last line of the .containerignore that matches a
2b1b9b
particular file determines whether it is included or excluded. Consider the following example:
2b1b9b
```
2b1b9b
*.md
2b1b9b
!README*.md
2b1b9b
README-secret.md
2b1b9b
```
2b1b9b
No markdown files are included in the context except README files other than README-secret.md.
2b1b9b
2b1b9b
Now consider this example:
2b1b9b
```
2b1b9b
*.md
2b1b9b
README-secret.md
2b1b9b
!README*.md
2b1b9b
```
2b1b9b
All of the README files are included. The middle line has no effect because !README*.md matches README-secret.md and
2b1b9b
comes last.
2b1b9b
2b1b9b
You can even use the .containerignore file to exclude the Containerfile or Dockerfile and .containerignore files.
2b1b9b
These files are still sent to the daemon because it needs them to do its job. But the ADD and COPY instructions do
2b1b9b
not copy them to the image.
2b1b9b
2b1b9b
Finally, you may want to specify which files to include in the context, rather than which to exclude. To achieve
2b1b9b
this, specify * as the first pattern, followed by one or more ! exception patterns.
2b1b9b
2b1b9b
## SEE ALSO
2b1b9b
buildah-build(1), podman-build(1), docker-build(1)
2b1b9b
2b1b9b
# HISTORY
2b1b9b
*Sep 2021, Compiled by Dan Walsh (dwalsh at redhat dot com) based on docker.com .dockerignore documentation.