From 471098f7cc45ba0c697eb9f55c737f8145a79994 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Mon, 7 Apr 2014 18:23:22 -0700 Subject: [PATCH] Ensure that ro mounts are remounted Docker-DCO-1.1-Signed-off-by: Michael Crosby (github: crosbymichael) --- nsinit/mount.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/nsinit/mount.go b/nsinit/mount.go index 4b5a42b1..3b0cf13b 100644 --- a/nsinit/mount.go +++ b/nsinit/mount.go @@ -37,14 +37,21 @@ func setupNewMountNamespace(rootfs string, bindMounts []libcontainer.Mount, cons } for _, m := range bindMounts { - flags := syscall.MS_BIND | syscall.MS_REC + var ( + flags = syscall.MS_BIND | syscall.MS_REC + dest = filepath.Join(rootfs, m.Destination) + ) if !m.Writable { flags = flags | syscall.MS_RDONLY } - dest := filepath.Join(rootfs, m.Destination) if err := system.Mount(m.Source, dest, "bind", uintptr(flags), ""); err != nil { return fmt.Errorf("mounting %s into %s %s", m.Source, dest, err) } + if !m.Writable { + if err := system.Mount(m.Source, dest, "bind", uintptr(flags|syscall.MS_REMOUNT), ""); err != nil { + return fmt.Errorf("remounting %s into %s %s", m.Source, dest, err) + } + } if m.Private { if err := system.Mount("", dest, "none", uintptr(syscall.MS_PRIVATE), ""); err != nil { return fmt.Errorf("mounting %s private %s", dest, err)