@@ -236,7 +236,11 @@ func (c *Container) exec() error {
236236 for {
237237 select {
238238 case result := <- blockingFifoOpenCh :
239- return handleFifoResult (result )
239+ err := handleFifoResult (result )
240+ if err != nil {
241+ return err
242+ }
243+ return c .postStart ()
240244
241245 case <- time .After (time .Millisecond * 100 ):
242246 stat , err := system .Stat (pid )
@@ -246,12 +250,25 @@ func (c *Container) exec() error {
246250 if err := handleFifoResult (fifoOpen (path , false )); err != nil {
247251 return errors .New ("container process is already dead" )
248252 }
249- return nil
250253 }
251254 }
252255 }
253256}
254257
258+ func (c * Container ) postStart () error {
259+ s , err := c .currentOCIState ()
260+ if err != nil {
261+ return err
262+ }
263+ if c .config .Hooks != nil {
264+ if err := c .config .Hooks .Run (configs .Poststart , s ); err != nil {
265+ logrus .Errorf ("run poststart hook: %v" , err )
266+ return fmt .Errorf ("run poststart hook: %w" , err )
267+ }
268+ }
269+ return nil
270+ }
271+
255272func readFromExecFifo (execFifo io.Reader ) error {
256273 data , err := io .ReadAll (execFifo )
257274 if err != nil {
@@ -353,19 +370,6 @@ func (c *Container) start(process *Process) (retErr error) {
353370
354371 if process .Init {
355372 c .fifo .Close ()
356- if c .config .Hooks != nil {
357- s , err := c .currentOCIState ()
358- if err != nil {
359- return err
360- }
361-
362- if err := c .config .Hooks .Run (configs .Poststart , s ); err != nil {
363- if err := ignoreTerminateErrors (parent .terminate ()); err != nil {
364- logrus .Warn (fmt .Errorf ("error running poststart hook: %w" , err ))
365- }
366- return err
367- }
368- }
369373 }
370374 return nil
371375}
0 commit comments