mirror of
https://github.com/containers/podman.git
synced 2025-06-22 18:08:11 +08:00
Merge pull request #13619 from rhatdan/systemd
Set systemd mode if entrypoint begins with /bin/sh -c
This commit is contained in:
@ -304,7 +304,16 @@ func createContainerOptions(ctx context.Context, rt *libpod.Runtime, s *specgen.
|
|||||||
"/usr/sbin/init": true,
|
"/usr/sbin/init": true,
|
||||||
"/usr/local/sbin/init": true,
|
"/usr/local/sbin/init": true,
|
||||||
}
|
}
|
||||||
if useSystemdCommands[command[0]] || (filepath.Base(command[0]) == "systemd") {
|
// Grab last command incase this is launched from a shell
|
||||||
|
cmd := command
|
||||||
|
if len(command) > 2 {
|
||||||
|
// Podman build will add "/bin/sh" "-c" to
|
||||||
|
// Entrypoint. Remove and search for systemd
|
||||||
|
if command[0] == "/bin/sh" && command[1] == "-c" {
|
||||||
|
cmd = command[2:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if useSystemdCommands[cmd[0]] || (filepath.Base(cmd[0]) == "systemd") {
|
||||||
useSystemd = true
|
useSystemd = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package integration
|
package integration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
. "github.com/containers/podman/v4/test/utils"
|
. "github.com/containers/podman/v4/test/utils"
|
||||||
@ -130,6 +132,31 @@ WantedBy=default.target
|
|||||||
Expect(conData[0].Config.SystemdMode).To(BeTrue())
|
Expect(conData[0].Config.SystemdMode).To(BeTrue())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("podman systemd in command triggers systemd mode", func() {
|
||||||
|
containerfile := fmt.Sprintf(`FROM %s
|
||||||
|
RUN mkdir -p /usr/lib/systemd/; touch /usr/lib/systemd/systemd
|
||||||
|
CMD /usr/lib/systemd/systemd`, ALPINE)
|
||||||
|
|
||||||
|
containerfilePath := filepath.Join(podmanTest.TempDir, "Containerfile")
|
||||||
|
err := ioutil.WriteFile(containerfilePath, []byte(containerfile), 0755)
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
session := podmanTest.Podman([]string{"build", "-t", "systemd", "--file", containerfilePath, podmanTest.TempDir})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(Exit(0))
|
||||||
|
|
||||||
|
ctrName := "testCtr"
|
||||||
|
run := podmanTest.Podman([]string{"create", "--name", ctrName, "systemd"})
|
||||||
|
run.WaitWithDefaultTimeout()
|
||||||
|
Expect(run).Should(Exit(0))
|
||||||
|
|
||||||
|
result := podmanTest.Podman([]string{"inspect", ctrName})
|
||||||
|
result.WaitWithDefaultTimeout()
|
||||||
|
Expect(result).Should(Exit(0))
|
||||||
|
conData := result.InspectContainerToJSON()
|
||||||
|
Expect(conData).To(HaveLen(1))
|
||||||
|
Expect(conData[0].Config.SystemdMode).To(BeTrue())
|
||||||
|
})
|
||||||
|
|
||||||
It("podman create container with --uidmap and conmon PidFile accessible", func() {
|
It("podman create container with --uidmap and conmon PidFile accessible", func() {
|
||||||
ctrName := "testCtrUidMap"
|
ctrName := "testCtrUidMap"
|
||||||
run := podmanTest.Podman([]string{"run", "-d", "--uidmap=0:1:1000", "--name", ctrName, ALPINE, "top"})
|
run := podmanTest.Podman([]string{"run", "-d", "--uidmap=0:1:1000", "--name", ctrName, ALPINE, "top"})
|
||||||
|
Reference in New Issue
Block a user