From db988e0c4a4651f1921068f3369a5b81b3a1a13a Mon Sep 17 00:00:00 2001 From: ningmingxiao Date: Tue, 16 Jul 2024 00:11:07 +0800 Subject: [PATCH] fix runc's poststart behaviour doesn't match the runtime-spec Signed-off-by: ningmingxiao --- libcontainer/container_linux.go | 34 ++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/libcontainer/container_linux.go b/libcontainer/container_linux.go index e3e2cf2bdb8..e5d911c0b19 100644 --- a/libcontainer/container_linux.go +++ b/libcontainer/container_linux.go @@ -236,7 +236,11 @@ func (c *Container) exec() error { for { select { case result := <-blockingFifoOpenCh: - return handleFifoResult(result) + err := handleFifoResult(result) + if err != nil { + return err + } + return c.PostStart() case <-time.After(time.Millisecond * 100): stat, err := system.Stat(pid) @@ -246,12 +250,25 @@ func (c *Container) exec() error { if err := handleFifoResult(fifoOpen(path, false)); err != nil { return errors.New("container process is already dead") } - return nil + return c.PostStart() } } } } +func (c *Container) PostStart() error { + s, err := c.currentOCIState() + if err != nil { + return err + } + if c.config.Hooks != nil { + if err := c.config.Hooks.Run(configs.Poststart, s); err != nil { + return fmt.Errorf("run postStart hook:%w", err) + } + } + return nil +} + func readFromExecFifo(execFifo io.Reader) error { data, err := io.ReadAll(execFifo) if err != nil { @@ -353,19 +370,6 @@ func (c *Container) start(process *Process) (retErr error) { if process.Init { c.fifo.Close() - if c.config.Hooks != nil { - s, err := c.currentOCIState() - if err != nil { - return err - } - - if err := c.config.Hooks.Run(configs.Poststart, s); err != nil { - if err := ignoreTerminateErrors(parent.terminate()); err != nil { - logrus.Warn(fmt.Errorf("error running poststart hook: %w", err)) - } - return err - } - } } return nil }