podman-remote build use .containerignore over .dockerignore
$ mkdir zzz;cd zzz $ printf "FROM quay.io/libpod/testimage:20210610\nCOPY ./ ./\nCOPY subdir ./\n" >Dockerfile $ printf "*\nsubdir\n\!*/sub1*\n" >.dockerignore $ mkdir subdir; touch subdir/sub1.txt $ ../bin/podman-remote build . Should fail, but succeeds because we are not sending over the .dockerignore file to the server side. This PR will send the .dockerignore so the server side and use it. Fixes: #10907 Also if both .containerignore and .dockerignore in the context directory, podman-remote should prefer .containerignore and not use .dockerignore. Fixes: #10908 Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
parent
1e236845e6
commit
c9970647ba
|
|
@ -302,7 +302,7 @@ func Build(ctx context.Context, containerFiles []string, options entities.BuildO
|
|||
tarContent := []string{options.ContextDirectory}
|
||||
newContainerFiles := []string{}
|
||||
|
||||
dontexcludes := []string{"!Dockerfile", "!Containerfile"}
|
||||
dontexcludes := []string{"!Dockerfile", "!Containerfile", "!.dockerignore", "!.containerignore"}
|
||||
for _, c := range containerFiles {
|
||||
if c == "/dev/stdin" {
|
||||
content, err := ioutil.ReadAll(os.Stdin)
|
||||
|
|
@ -550,9 +550,13 @@ func nTar(excludes []string, sources ...string) (io.ReadCloser, error) {
|
|||
}
|
||||
|
||||
func parseDockerignore(root string) ([]string, error) {
|
||||
ignore, err := ioutil.ReadFile(filepath.Join(root, ".dockerignore"))
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
return nil, errors.Wrapf(err, "error reading .dockerignore: '%s'", root)
|
||||
ignore, err := ioutil.ReadFile(filepath.Join(root, ".containerignore"))
|
||||
if err != nil {
|
||||
var dockerIgnoreErr error
|
||||
ignore, dockerIgnoreErr = ioutil.ReadFile(filepath.Join(root, ".dockerignore"))
|
||||
if dockerIgnoreErr != nil && !os.IsNotExist(dockerIgnoreErr) {
|
||||
return nil, errors.Wrapf(err, "error reading .containerignore: '%s'", root)
|
||||
}
|
||||
}
|
||||
rawexcludes := strings.Split(string(ignore), "\n")
|
||||
excludes := make([]string, 0, len(rawexcludes))
|
||||
|
|
|
|||
|
|
@ -851,7 +851,7 @@ EOF
|
|||
run_podman rmi -f build_test
|
||||
}
|
||||
|
||||
@test "podman build -f test " {
|
||||
@test "podman build -f test" {
|
||||
tmpdir=$PODMAN_TMPDIR/build-test
|
||||
subdir=$tmpdir/subdir
|
||||
mkdir -p $subdir
|
||||
|
|
@ -877,6 +877,44 @@ EOF
|
|||
run_podman rmi -f build_test
|
||||
}
|
||||
|
||||
@test "podman build .dockerignore failure test" {
|
||||
tmpdir=$PODMAN_TMPDIR/build-test
|
||||
subdir=$tmpdir/subdir
|
||||
mkdir -p $subdir
|
||||
|
||||
cat >$tmpdir/.dockerignore <<EOF
|
||||
*
|
||||
subdir
|
||||
!*/sub1*
|
||||
EOF
|
||||
cat >$tmpdir/Containerfile <<EOF
|
||||
FROM $IMAGE
|
||||
COPY ./ ./
|
||||
COPY subdir ./
|
||||
EOF
|
||||
run_podman 125 build -t build_test $tmpdir
|
||||
is "$output" ".*Error: error building at STEP \"COPY subdir ./\"" ".dockerignore was ignored"
|
||||
}
|
||||
|
||||
@test "podman build .containerignore and .dockerignore test" {
|
||||
tmpdir=$PODMAN_TMPDIR/build-test
|
||||
mkdir -p $tmpdir
|
||||
touch $tmpdir/test1 $tmpdir/test2
|
||||
cat >$tmpdir/.containerignore <<EOF
|
||||
test2*
|
||||
EOF
|
||||
cat >$tmpdir/.dockerignore <<EOF
|
||||
test1*
|
||||
EOF
|
||||
cat >$tmpdir/Containerfile <<EOF
|
||||
FROM $IMAGE
|
||||
COPY ./ /tmp/test/
|
||||
RUN ls /tmp/test/
|
||||
EOF
|
||||
run_podman build -t build_test $tmpdir
|
||||
is "$output" ".*test1" "test1 should exists in the final image"
|
||||
}
|
||||
|
||||
function teardown() {
|
||||
# A timeout or other error in 'build' can leave behind stale images
|
||||
# that podman can't even see and which will cascade into subsequent
|
||||
|
|
|
|||
Loading…
Reference in New Issue