Skip to content

Fix support docker specific ignore#68

Merged
JaewonHur merged 4 commits intoapple:mainfrom
JaewonHur:fix-docker-ignore
Mar 12, 2026
Merged

Fix support docker specific ignore#68
JaewonHur merged 4 commits intoapple:mainfrom
JaewonHur:fix-docker-ignore

Conversation

@JaewonHur
Copy link
Copy Markdown
Contributor

@JaewonHur JaewonHur commented Feb 26, 2026

This PR supports using docker specific ignore file regardless of the i) custom Dockerfile name, ii) Dockerfile outside context, and iii) Dockerfile under nested directory (apple/container#1169).

Since buildkit container cannot resolve the docker specific ignore file outside the context, builder proxy (outside container) passes the file contents (i.e., KeyDockerignore) if docker specific ignore file is found. Then, buildkit container creates a hidden directory (i.e., HiddenDirName) and places Dockerfile and Dockerignore under it so that buildkit daemon correctly resolves and applies them. That hidden directory is appended in the Dockerignore so that it is not exposed to the final built image.

If Dockerignore file content is not provided, no hidden directory is created and buildkit daemon will refer the Dockerignore file at context root as usual.

@JaewonHur JaewonHur mentioned this pull request Feb 26, 2026
7 tasks
This supports dockerfile and docker specific ignore file outside the
context directory.
const (
KeyContentStoreName = "container"
KeyDockerfile = "dockerfile"
KeyDockerfilePath = "dockerfile-path"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is KeyDockerignore not needed also?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh I haven't updated the code. Thank you!

@JaewonHur JaewonHur merged commit fec54f1 into apple:main Mar 12, 2026
2 checks passed
JaewonHur added a commit that referenced this pull request Mar 14, 2026
Previous docker ignore fix (#68) has race bug when syncing files to the buildkit daemon. Upon file request from buildkitd, the FSSync proxy in builder shim checks `_checksum` variable to check if build context is synced inside VM, and responds differently: i) if not, it forwards a request to the proxy outside to get the file, ii) if synced, it immediately provides the file.

However, since #68 creates a hidden docker directory inside builder shim during sync, if the request for Dockerfile is received before the sync, it just forwards the request outside, which doesn't know that hidden directory.

This PR assumes the directory is created outside, so that such request can be handled.
JaewonHur added a commit to apple/container that referenced this pull request Mar 16, 2026
This PR fixes `container build` to use docker specific ignore (#1169).
This PR relies on apple/container-builder-shim#68.

When docker specific ignore file is detected, it creates a hidden docker
directory (i.e., `.hidden-docker-dir`) under the build context, and
places Dockerfile and ignore file under there. This hidden directory is
passed to the builder shim and used by buildkit daemon to correctly
figure out the docker specific ignore file.

Docker specific ignore file is detected regardless of whether i) they
are under nested directory, ii) outside build context, iii) using custom
names. If docker specific ignore is not provided, hidden directory is
also not created, and buildkit daemon will use the docker ignore file at
build context root as usual.

## Type of Change
- [X] Bug fix
- [ ] New feature  
- [ ] Breaking change
- [ ] Documentation update

## Motivation and Context
Docker specific ignore works.

## Testing
- [X] Tested locally
- [ ] Added/updated tests
- [ ] Added/updated docs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants