oci_linux_test.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package daemon
  2. import (
  3. "testing"
  4. containertypes "github.com/docker/docker/api/types/container"
  5. "github.com/docker/docker/container"
  6. "github.com/docker/docker/daemon/config"
  7. "github.com/docker/docker/oci"
  8. "github.com/docker/docker/pkg/idtools"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. // TestTmpfsDevShmNoDupMount checks that a user-specified /dev/shm tmpfs
  12. // mount (as in "docker run --tmpfs /dev/shm:rw,size=NNN") does not result
  13. // in "Duplicate mount point" error from the engine.
  14. // https://github.com/moby/moby/issues/35455
  15. func TestTmpfsDevShmNoDupMount(t *testing.T) {
  16. d := Daemon{
  17. // some empty structs to avoid getting a panic
  18. // caused by a null pointer dereference
  19. idMappings: &idtools.IDMappings{},
  20. configStore: &config.Config{},
  21. }
  22. c := &container.Container{
  23. ShmPath: "foobar", // non-empty, for c.IpcMounts() to work
  24. HostConfig: &containertypes.HostConfig{
  25. IpcMode: containertypes.IpcMode("shareable"), // default mode
  26. // --tmpfs /dev/shm:rw,exec,size=NNN
  27. Tmpfs: map[string]string{
  28. "/dev/shm": "rw,exec,size=1g",
  29. },
  30. },
  31. }
  32. // Mimick the code flow of daemon.createSpec(), enough to reproduce the issue
  33. ms, err := d.setupMounts(c)
  34. assert.NoError(t, err)
  35. ms = append(ms, c.IpcMounts()...)
  36. tmpfsMounts, err := c.TmpfsMounts()
  37. assert.NoError(t, err)
  38. ms = append(ms, tmpfsMounts...)
  39. s := oci.DefaultSpec()
  40. err = setMounts(&d, &s, c, ms)
  41. assert.NoError(t, err)
  42. }