Fix support docker specific ignore#68
Merged
JaewonHur merged 4 commits intoapple:mainfrom Mar 12, 2026
Merged
Conversation
7 tasks
This supports dockerfile and docker specific ignore file outside the context directory.
saehejkang
reviewed
Feb 28, 2026
pkg/build/buildopts.go
Outdated
| const ( | ||
| KeyContentStoreName = "container" | ||
| KeyDockerfile = "dockerfile" | ||
| KeyDockerfilePath = "dockerfile-path" |
Contributor
There was a problem hiding this comment.
Is KeyDockerignore not needed also?
Contributor
Author
There was a problem hiding this comment.
Oh I haven't updated the code. Thank you!
jglogan
requested changes
Mar 12, 2026
faee1ad to
279bb2a
Compare
jglogan
approved these changes
Mar 12, 2026
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.