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