Skip to content

Commit

Permalink
container creation: don't apply reserved annotations from image
Browse files Browse the repository at this point in the history
Do not apply reserved annotations from the image to the container.
Reserved annotations are applied during container creation to retrieve
certain information (e.g., custom seccomp profile or autoremoval)
once a container has been created.

Context: #12671
Signed-off-by: Valentin Rothberg <[email protected]>
  • Loading branch information
vrothberg committed Dec 23, 2021
1 parent cbcab43 commit 1aa4e4d
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 4 deletions.
12 changes: 12 additions & 0 deletions libpod/define/annotations.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,15 @@ const (
// annotation.
InspectResponseFalse = "FALSE"
)

// IsReservedAnnotation returns true if the specified value corresponds to an
// already reserved annotation that Podman sets during container creation.
func IsReservedAnnotation(value string) bool {
switch value {
case InspectAnnotationCIDFile, InspectAnnotationAutoremove, InspectAnnotationVolumesFrom, InspectAnnotationPrivileged, InspectAnnotationPublishAll, InspectAnnotationInit, InspectAnnotationLabel, InspectAnnotationSeccomp, InspectAnnotationApparmor, InspectResponseTrue, InspectResponseFalse:
return true

default:
return false
}
}
4 changes: 3 additions & 1 deletion pkg/specgen/generate/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,9 @@ func CompleteSpec(ctx context.Context, r *libpod.Runtime, s *specgen.SpecGenerat

// Add annotations from the image
for k, v := range inspectData.Annotations {
annotations[k] = v
if !define.IsReservedAnnotation(k) {
annotations[k] = v
}
}
}

Expand Down
12 changes: 9 additions & 3 deletions test/e2e/build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,19 +238,25 @@ var _ = Describe("Podman build", func() {
Expect("sha256:" + data[0].ID).To(Equal(string(id)))
})

It("podman Test PATH in built image", func() {
It("podman Test PATH and reserved annotation in built image", func() {
path := "/tmp:/bin:/usr/bin:/usr/sbin"
session := podmanTest.Podman([]string{
"build", "--pull-never", "-f", "build/basicalpine/Containerfile.path", "-t", "test-path",
"build", "--annotation", "io.podman.annotations.seccomp=foobar", "--pull-never", "-f", "build/basicalpine/Containerfile.path", "-t", "test-path",
})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))

session = podmanTest.Podman([]string{"run", "test-path", "printenv", "PATH"})
session = podmanTest.Podman([]string{"run", "--name", "foobar", "test-path", "printenv", "PATH"})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
stdoutLines := session.OutputToStringArray()
Expect(stdoutLines[0]).Should(Equal(path))

// Reserved annotation should not be applied from the image to the container.
session = podmanTest.Podman([]string{"inspect", "foobar"})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
Expect(session.OutputToString()).NotTo(ContainSubstring("io.podman.annotations.seccomp"))
})

It("podman build --http_proxy flag", func() {
Expand Down

0 comments on commit 1aa4e4d

Please sign in to comment.