mirror of
https://github.com/containers/podman.git
synced 2025-06-29 15:08:09 +08:00
When determining systemd mode, use full command
We were only using the Command field in specgen when determining whether to enable systemd if systemd=true (the default) was used. This does not include the entrypoint, and does not include any entrypoint/command sourced from the image - so an image could be running systemd and we'd not correctly detect this. Using the full, final command resolves this and matches Podman v1.9.x behavior. Fixes #6920 Signed-off-by: Matthew Heon <matthew.heon@pm.me>
This commit is contained in:
@ -106,11 +106,12 @@ func MakeContainer(ctx context.Context, rt *libpod.Runtime, s *specgen.SpecGener
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if s.PreserveFDs > 0 {
|
||||
options = append(options, libpod.WithPreserveFDs(s.PreserveFDs))
|
||||
command, err := makeCommand(ctx, s, newImage, rtc)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
opts, err := createContainerOptions(ctx, rt, s, pod, finalVolumes, newImage)
|
||||
opts, err := createContainerOptions(ctx, rt, s, pod, finalVolumes, newImage, command)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -122,17 +123,21 @@ func MakeContainer(ctx context.Context, rt *libpod.Runtime, s *specgen.SpecGener
|
||||
}
|
||||
options = append(options, libpod.WithExitCommand(exitCommandArgs))
|
||||
|
||||
runtimeSpec, err := SpecGenToOCI(ctx, s, rt, rtc, newImage, finalMounts, pod)
|
||||
runtimeSpec, err := SpecGenToOCI(ctx, s, rt, rtc, newImage, finalMounts, pod, command)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return rt.NewContainer(ctx, runtimeSpec, options...)
|
||||
}
|
||||
|
||||
func createContainerOptions(ctx context.Context, rt *libpod.Runtime, s *specgen.SpecGenerator, pod *libpod.Pod, volumes []*specgen.NamedVolume, img *image.Image) ([]libpod.CtrCreateOption, error) {
|
||||
func createContainerOptions(ctx context.Context, rt *libpod.Runtime, s *specgen.SpecGenerator, pod *libpod.Pod, volumes []*specgen.NamedVolume, img *image.Image, command []string) ([]libpod.CtrCreateOption, error) {
|
||||
var options []libpod.CtrCreateOption
|
||||
var err error
|
||||
|
||||
if s.PreserveFDs > 0 {
|
||||
options = append(options, libpod.WithPreserveFDs(s.PreserveFDs))
|
||||
}
|
||||
|
||||
if s.Stdin {
|
||||
options = append(options, libpod.WithStdin())
|
||||
}
|
||||
@ -148,7 +153,6 @@ func createContainerOptions(ctx context.Context, rt *libpod.Runtime, s *specgen.
|
||||
case "false":
|
||||
break
|
||||
case "", "true":
|
||||
command := s.Command
|
||||
if len(command) == 0 {
|
||||
command, err = img.Cmd(ctx)
|
||||
if err != nil {
|
||||
|
@ -126,7 +126,7 @@ func makeCommand(ctx context.Context, s *specgen.SpecGenerator, img *image.Image
|
||||
return finalCommand, nil
|
||||
}
|
||||
|
||||
func SpecGenToOCI(ctx context.Context, s *specgen.SpecGenerator, rt *libpod.Runtime, rtc *config.Config, newImage *image.Image, mounts []spec.Mount, pod *libpod.Pod) (*spec.Spec, error) {
|
||||
func SpecGenToOCI(ctx context.Context, s *specgen.SpecGenerator, rt *libpod.Runtime, rtc *config.Config, newImage *image.Image, mounts []spec.Mount, pod *libpod.Pod, finalCmd []string) (*spec.Spec, error) {
|
||||
var (
|
||||
inUserNS bool
|
||||
)
|
||||
@ -252,10 +252,6 @@ func SpecGenToOCI(ctx context.Context, s *specgen.SpecGenerator, rt *libpod.Runt
|
||||
}
|
||||
g.SetProcessCwd(s.WorkDir)
|
||||
|
||||
finalCmd, err := makeCommand(ctx, s, newImage, rtc)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
g.SetProcessArgs(finalCmd)
|
||||
|
||||
g.SetProcessTerminal(s.Terminal)
|
||||
|
Reference in New Issue
Block a user