Files
Daniel J Walsh 18d6bb40d5 Support passing of Ulimits as -1 to mean max
Docker allows the passing of -1 to indicate the maximum limit
allowed for the current process.

Fixes: https://github.com/containers/podman/issues/19319

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2023-11-01 08:46:55 -04:00

60 lines
1.5 KiB
Go

//go:build !remote
// +build !remote
package generate
import (
"fmt"
"strings"
"github.com/containers/common/libimage"
"github.com/containers/podman/v4/libpod/define"
"github.com/containers/podman/v4/pkg/specgen"
"github.com/opencontainers/runtime-tools/generate"
)
func addRlimits(s *specgen.SpecGenerator, g *generate.Generator) {
g.Config.Process.Rlimits = nil
for _, u := range s.Rlimits {
name := "RLIMIT_" + strings.ToUpper(u.Type)
u = subNegativeOne(u)
g.AddProcessRlimits(name, u.Hard, u.Soft)
}
}
// Produce the final command for the container.
func makeCommand(s *specgen.SpecGenerator, imageData *libimage.ImageData) ([]string, error) {
finalCommand := []string{}
entrypoint := s.Entrypoint
if entrypoint == nil && imageData != nil {
entrypoint = imageData.Config.Entrypoint
}
// Don't append the entrypoint if it is [""]
if len(entrypoint) != 1 || entrypoint[0] != "" {
finalCommand = append(finalCommand, entrypoint...)
}
// Only use image command if the user did not manually set an
// entrypoint.
command := s.Command
if len(command) == 0 && imageData != nil && len(s.Entrypoint) == 0 {
command = imageData.Config.Cmd
}
finalCommand = append(finalCommand, command...)
if len(finalCommand) == 0 {
return nil, fmt.Errorf("no command or entrypoint provided, and no CMD or ENTRYPOINT from image")
}
if s.Init {
// bind mount for this binary is added in addContainerInitBinary()
finalCommand = append([]string{define.ContainerInitPath, "--"}, finalCommand...)
}
return finalCommand, nil
}