remove_test.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package container // import "github.com/docker/docker/integration/container"
  2. import (
  3. "context"
  4. "os"
  5. "testing"
  6. "time"
  7. "github.com/docker/docker/api/types"
  8. "github.com/docker/docker/api/types/filters"
  9. "github.com/docker/docker/api/types/volume"
  10. "github.com/docker/docker/integration/internal/container"
  11. "gotest.tools/v3/assert"
  12. is "gotest.tools/v3/assert/cmp"
  13. "gotest.tools/v3/fs"
  14. "gotest.tools/v3/poll"
  15. "gotest.tools/v3/skip"
  16. )
  17. func getPrefixAndSlashFromDaemonPlatform() (prefix, slash string) {
  18. if testEnv.DaemonInfo.OSType == "windows" {
  19. return "c:", `\`
  20. }
  21. return "", "/"
  22. }
  23. // Test case for #5244: `docker rm` fails if bind dir doesn't exist anymore
  24. func TestRemoveContainerWithRemovedVolume(t *testing.T) {
  25. skip.If(t, testEnv.IsRemoteDaemon)
  26. defer setupTest(t)()
  27. ctx := context.Background()
  28. apiClient := testEnv.APIClient()
  29. prefix, slash := getPrefixAndSlashFromDaemonPlatform()
  30. tempDir := fs.NewDir(t, "test-rm-container-with-removed-volume", fs.WithMode(0o755))
  31. defer tempDir.Remove()
  32. cID := container.Run(ctx, t, apiClient, container.WithCmd("true"), container.WithBind(tempDir.Path(), prefix+slash+"test"))
  33. poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "exited"), poll.WithDelay(100*time.Millisecond))
  34. err := os.RemoveAll(tempDir.Path())
  35. assert.NilError(t, err)
  36. err = apiClient.ContainerRemove(ctx, cID, types.ContainerRemoveOptions{
  37. RemoveVolumes: true,
  38. })
  39. assert.NilError(t, err)
  40. _, _, err = apiClient.ContainerInspectWithRaw(ctx, cID, true)
  41. assert.Check(t, is.ErrorContains(err, "No such container"))
  42. }
  43. // Test case for #2099/#2125
  44. func TestRemoveContainerWithVolume(t *testing.T) {
  45. defer setupTest(t)()
  46. ctx := context.Background()
  47. apiClient := testEnv.APIClient()
  48. prefix, slash := getPrefixAndSlashFromDaemonPlatform()
  49. cID := container.Run(ctx, t, apiClient, container.WithCmd("true"), container.WithVolume(prefix+slash+"srv"))
  50. poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "exited"), poll.WithDelay(100*time.Millisecond))
  51. insp, _, err := apiClient.ContainerInspectWithRaw(ctx, cID, true)
  52. assert.NilError(t, err)
  53. assert.Check(t, is.Equal(1, len(insp.Mounts)))
  54. volName := insp.Mounts[0].Name
  55. err = apiClient.ContainerRemove(ctx, cID, types.ContainerRemoveOptions{
  56. RemoveVolumes: true,
  57. })
  58. assert.NilError(t, err)
  59. volumes, err := apiClient.VolumeList(ctx, volume.ListOptions{
  60. Filters: filters.NewArgs(filters.Arg("name", volName)),
  61. })
  62. assert.NilError(t, err)
  63. assert.Check(t, is.Equal(0, len(volumes.Volumes)))
  64. }
  65. func TestRemoveContainerRunning(t *testing.T) {
  66. defer setupTest(t)()
  67. ctx := context.Background()
  68. apiClient := testEnv.APIClient()
  69. cID := container.Run(ctx, t, apiClient)
  70. err := apiClient.ContainerRemove(ctx, cID, types.ContainerRemoveOptions{})
  71. assert.Check(t, is.ErrorContains(err, "cannot remove a running container"))
  72. }
  73. func TestRemoveContainerForceRemoveRunning(t *testing.T) {
  74. defer setupTest(t)()
  75. ctx := context.Background()
  76. apiClient := testEnv.APIClient()
  77. cID := container.Run(ctx, t, apiClient)
  78. err := apiClient.ContainerRemove(ctx, cID, types.ContainerRemoveOptions{
  79. Force: true,
  80. })
  81. assert.NilError(t, err)
  82. }
  83. func TestRemoveInvalidContainer(t *testing.T) {
  84. defer setupTest(t)()
  85. ctx := context.Background()
  86. apiClient := testEnv.APIClient()
  87. err := apiClient.ContainerRemove(ctx, "unknown", types.ContainerRemoveOptions{})
  88. assert.Check(t, is.ErrorContains(err, "No such container"))
  89. }