MCPcopy
hub / github.com/docker/compose / runWaitExec

Method runWaitExec

pkg/compose/hook.go:99–127  ·  pkg/compose/hook.go::composeService.runWaitExec
(ctx context.Context, execID string, service types.ServiceConfig, listener api.ContainerEventListener)

Source from the content-addressed store, hash-verified

97}
98
99func (s *composeService) runWaitExec(ctx context.Context, execID string, service types.ServiceConfig, listener api.ContainerEventListener) error {
100 _, err := s.apiClient().ExecStart(ctx, execID, client.ExecStartOptions{
101 Detach: listener == nil,
102 TTY: service.Tty,
103 })
104 if err != nil {
105 return err
106 }
107
108 // We miss a ContainerExecWait API
109 tick := time.NewTicker(100 * time.Millisecond)
110 for {
111 select {
112 case <-ctx.Done():
113 return nil
114 case <-tick.C:
115 inspect, err := s.apiClient().ExecInspect(ctx, execID, client.ExecInspectOptions{})
116 if err != nil {
117 return nil
118 }
119 if !inspect.Running {
120 if inspect.ExitCode != 0 {
121 return fmt.Errorf("%s hook exited with status %d", service.Name, inspect.ExitCode)
122 }
123 return nil
124 }
125 }
126 }
127}

Callers 1

runHookMethod · 0.95

Calls 4

apiClientMethod · 0.95
DoneMethod · 0.65
ExecStartMethod · 0.45
ExecInspectMethod · 0.45

Tested by

no test coverage detected