@@ -236,7 +236,11 @@ func (c *Container) exec() error {
236
236
for {
237
237
select {
238
238
case result := <- blockingFifoOpenCh :
239
- return handleFifoResult (result )
239
+ err := handleFifoResult (result )
240
+ if err != nil {
241
+ return err
242
+ }
243
+ return c .postStart ()
240
244
241
245
case <- time .After (time .Millisecond * 100 ):
242
246
stat , err := system .Stat (pid )
@@ -246,12 +250,26 @@ func (c *Container) exec() error {
246
250
if err := handleFifoResult (fifoOpen (path , false )); err != nil {
247
251
return errors .New ("container process is already dead" )
248
252
}
249
- return nil
253
+ return c . postStart ()
250
254
}
251
255
}
252
256
}
253
257
}
254
258
259
+ func (c * Container ) postStart () error {
260
+ s , err := c .currentOCIState ()
261
+ if err != nil {
262
+ return err
263
+ }
264
+ if c .config .Hooks != nil {
265
+ if err := c .config .Hooks .Run (configs .Poststart , s ); err != nil {
266
+ logrus .Errorf ("run poststart hook: %v" , err )
267
+ return fmt .Errorf ("run poststart hook: %w" , err )
268
+ }
269
+ }
270
+ return nil
271
+ }
272
+
255
273
func readFromExecFifo (execFifo io.Reader ) error {
256
274
data , err := io .ReadAll (execFifo )
257
275
if err != nil {
@@ -353,19 +371,6 @@ func (c *Container) start(process *Process) (retErr error) {
353
371
354
372
if process .Init {
355
373
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
- }
369
374
}
370
375
return nil
371
376
}
0 commit comments