| 66 | } |
| 67 | |
| 68 | func (d *dockerHook) postExec() error { |
| 69 | // sh.Command( |
| 70 | // "docker", "rm", "-f", d.Name(), |
| 71 | // ).Run() |
| 72 | name := d.Name() |
| 73 | retry := 10 |
| 74 | for ; retry > 0; retry-- { |
| 75 | out, err := sh.Command( |
| 76 | "docker", "ps", "-a", |
| 77 | "--filter", "name=^"+name+"$", |
| 78 | "--format", "{{.Status}}", |
| 79 | ).Output() |
| 80 | if err != nil { |
| 81 | logger.Errorf("docker ps failed: %v", err) |
| 82 | break |
| 83 | } |
| 84 | if len(out) == 0 { |
| 85 | break |
| 86 | } |
| 87 | logger.Debugf("container %s still exists: '%s'", name, string(out)) |
| 88 | time.Sleep(1 * time.Second) |
| 89 | } |
| 90 | if retry == 0 { |
| 91 | logger.Warningf("container %s not removed automatically, next sync may fail", name) |
| 92 | } |
| 93 | d.provider.ExitContext() |
| 94 | return nil |
| 95 | } |
| 96 | |
| 97 | // Volumes returns the configured volumes and |
| 98 | // runtime-needed volumes, including mirror dirs |