@@ -101,6 +101,13 @@ func remount(m mounter, src, dest string) error {
101101 if err := m .MkdirAll (destDir , 0o750 ); err != nil {
102102 return fmt .Errorf ("ensure path: %w" , err )
103103 }
104+ if ! stat .IsDir () {
105+ f , err := m .OpenFile (dest , os .O_CREATE , 0o640 )
106+ if err != nil {
107+ return fmt .Errorf ("ensure file path: %w" , err )
108+ }
109+ defer f .Close ()
110+ }
104111 if err := m .Mount (src , dest , "bind" , syscall .MS_BIND , "" ); err != nil {
105112 return fmt .Errorf ("bind mount %s => %s: %w" , src , dest , err )
106113 }
@@ -114,14 +121,16 @@ func remount(m mounter, src, dest string) error {
114121type mounter interface {
115122 // GetMounts wraps procfs.GetMounts
116123 GetMounts () ([]* procfs.MountInfo , error )
124+ // Stat wraps os.Stat
125+ Stat (string ) (os.FileInfo , error )
117126 // MkdirAll wraps os.MkdirAll
118127 MkdirAll (string , os.FileMode ) error
128+ // OpenFile wraps os.OpenFile
129+ OpenFile (string , int , os.FileMode ) (* os.File , error )
119130 // Mount wraps syscall.Mount
120131 Mount (string , string , string , uintptr , string ) error
121132 // Unmount wraps syscall.Unmount
122133 Unmount (string , int ) error
123- // Stat wraps os.Stat
124- Stat (string ) (os.FileInfo , error )
125134}
126135
127136// realMounter implements mounter and actually does the thing.
@@ -145,6 +154,10 @@ func (m *realMounter) MkdirAll(path string, perm os.FileMode) error {
145154 return os .MkdirAll (path , perm )
146155}
147156
157+ func (m * realMounter ) OpenFile (name string , flag int , perm os.FileMode ) (* os.File , error ) {
158+ return os .OpenFile (name , flag , perm )
159+ }
160+
148161func (m * realMounter ) Stat (path string ) (os.FileInfo , error ) {
149162 return os .Stat (path )
150163}
0 commit comments