Default to image entrypoint for infra container
If the pod infra container is overriden, we want to run the entry point of the image, instead of the default infra command. This allows users to override the infra-image with greater ease. Also use process environment variables from image Signed-off-by: Peter Hunt <pehunt@redhat.com>
This commit is contained in:
parent
90319bcf52
commit
dff224a205
|
|
@ -4,11 +4,14 @@ package libpod
|
|||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/containers/libpod/libpod/image"
|
||||
"github.com/containers/libpod/pkg/rootless"
|
||||
"github.com/opencontainers/image-spec/specs-go/v1"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/runtime-tools/generate"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
@ -17,7 +20,7 @@ const (
|
|||
IDTruncLength = 12
|
||||
)
|
||||
|
||||
func (r *Runtime) makeInfraContainer(ctx context.Context, p *Pod, imgName, imgID string) (*Container, error) {
|
||||
func (r *Runtime) makeInfraContainer(ctx context.Context, p *Pod, imgName, imgID string, config *v1.ImageConfig) (*Container, error) {
|
||||
|
||||
// Set up generator for infra container defaults
|
||||
g, err := generate.New("linux")
|
||||
|
|
@ -27,8 +30,23 @@ func (r *Runtime) makeInfraContainer(ctx context.Context, p *Pod, imgName, imgID
|
|||
|
||||
isRootless := rootless.IsRootless()
|
||||
|
||||
entryCmd := []string{r.config.InfraCommand}
|
||||
// default to entrypoint in image if there is one
|
||||
if len(config.Entrypoint) > 0 {
|
||||
entryCmd = config.Entrypoint
|
||||
}
|
||||
if len(config.Env) > 0 {
|
||||
for _, nameValPair := range config.Env {
|
||||
nameValSlice := strings.Split(nameValPair, "=")
|
||||
if len(nameValSlice) < 2 {
|
||||
return nil, errors.Errorf("Invalid environment variable structure in pause image")
|
||||
}
|
||||
g.AddProcessEnv(nameValSlice[0], nameValSlice[1])
|
||||
}
|
||||
}
|
||||
|
||||
g.SetRootReadonly(true)
|
||||
g.SetProcessArgs([]string{r.config.InfraCommand})
|
||||
g.SetProcessArgs(entryCmd)
|
||||
|
||||
if isRootless {
|
||||
g.RemoveMount("/dev/pts")
|
||||
|
|
@ -79,5 +97,5 @@ func (r *Runtime) createInfraContainer(ctx context.Context, p *Pod) (*Container,
|
|||
imageName := newImage.Names()[0]
|
||||
imageID := data.ID
|
||||
|
||||
return r.makeInfraContainer(ctx, p, imageName, imageID)
|
||||
return r.makeInfraContainer(ctx, p, imageName, imageID, newImage.Config)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,6 +69,18 @@ var _ = Describe("Podman pod create", func() {
|
|||
Expect(len(check.OutputToStringArray())).To(Equal(1))
|
||||
})
|
||||
|
||||
It("podman start infra container different image", func() {
|
||||
session := podmanTest.Podman([]string{"pod", "create", "--infra-image", BB})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
podID := session.OutputToString()
|
||||
|
||||
session = podmanTest.Podman([]string{"pod", "start", podID})
|
||||
session.WaitWithDefaultTimeout()
|
||||
// If we use the default entry point, we should exit with no error
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman infra container namespaces", func() {
|
||||
session := podmanTest.Podman([]string{"pod", "create"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
|
|
|
|||
Loading…
Reference in New Issue