public void CreateBindMounts(BindMount[] bindMounts, IContainerUser containerUser) { foreach (var bindMount in bindMounts) { var mappedDestinationPath = MapUserPath(bindMount.DestinationPath); var parentDir = Directory.GetParent(mappedDestinationPath).FullName; if (CanonicalizePath(parentDir, ensureTrailingSlash: true) != MapUserPath("")) { fileSystem.CreateDirectory(parentDir, GetContainerUserAccess(containerUser.UserName, FileAccess.ReadWrite)); } var cleanedSourcePath = bindMount.SourcePath.Replace("/", "\\"); fileSystem.Symlink(mappedDestinationPath, cleanedSourcePath); fileSystem.AddDirectoryAccess(mappedDestinationPath, FileAccess.Read, containerUser.UserName); fileSystem.AddDirectoryAccess(cleanedSourcePath, FileAccess.Read, containerUser.UserName); while (fileSystem.DirIsSymlink(cleanedSourcePath)) { var symlinkDest = fileSystem.GetSymlinkTarget(cleanedSourcePath); fileSystem.AddDirectoryAccess(symlinkDest, FileAccess.Read, containerUser.UserName); cleanedSourcePath = symlinkDest; } } }