diff --git a/pkg/buildah/common.go b/pkg/buildah/common.go index fe27392053..a0f742ba7a 100644 --- a/pkg/buildah/common.go +++ b/pkg/buildah/common.go @@ -175,7 +175,7 @@ func ResolveMode(mode Mode) Mode { } } -func GetOverlayOptions() ([]string, error) { +func GetFuseOverlayfsOptions() ([]string, error) { fuseOverlayBinPath, err := exec.LookPath("fuse-overlayfs") if err != nil { return nil, fmt.Errorf("\"fuse-overlayfs\" binary not found in PATH: %s", err) diff --git a/pkg/buildah/docker_with_fuse.go b/pkg/buildah/docker_with_fuse.go index e2c51dbbf4..8e2c04eae7 100644 --- a/pkg/buildah/docker_with_fuse.go +++ b/pkg/buildah/docker_with_fuse.go @@ -276,11 +276,12 @@ func runStorageContainer(ctx context.Context, name, image string) error { func newBuildahCliStoreOptions(driver StorageDriver) (*StoreOptions, error) { var graphDriverOptions []string if driver == StorageDriverOverlay { - overlayOpts, err := GetOverlayOptions() + fuseOpts, err := GetFuseOverlayfsOptions() if err != nil { return nil, fmt.Errorf("unable to get overlay options: %s", err) } - graphDriverOptions = append(graphDriverOptions, overlayOpts...) + graphDriverOptions = append(graphDriverOptions, fuseOpts...) + graphDriverOptions = append(graphDriverOptions, fmt.Sprintf("%s.ignore_chown_errors=true", StorageDriverOverlay)) } return &StoreOptions{ diff --git a/pkg/buildah/native_linux.go b/pkg/buildah/native_linux.go index 95ea235502..b87f115dbd 100644 --- a/pkg/buildah/native_linux.go +++ b/pkg/buildah/native_linux.go @@ -13,6 +13,8 @@ import ( "strings" "time" + "github.com/containers/storage/drivers/overlay" + "github.com/containers/buildah" "github.com/containers/buildah/define" "github.com/containers/buildah/imagebuildah" @@ -360,12 +362,23 @@ func NewNativeStoreOptions(rootlessUID int, driver StorageDriver) (*thirdparty.S } var graphDriverOptions []string - if driver == StorageDriverOverlay { - overlayOpts, err := GetOverlayOptions() + switch driver { + case StorageDriverOverlay: + supportsNative, err := overlay.SupportsNativeOverlay(graphRoot, runRoot) if err != nil { - return nil, fmt.Errorf("unable to get overlay options: %s", err) + return nil, fmt.Errorf("unable to check native overlayfs support: %s", err) } - graphDriverOptions = append(graphDriverOptions, overlayOpts...) + + if !supportsNative { + fuseOpts, err := GetFuseOverlayfsOptions() + if err != nil { + return nil, fmt.Errorf("unable to get fuse overlayfs options: %s", err) + } + + graphDriverOptions = append(graphDriverOptions, fuseOpts...) + } + + graphDriverOptions = append(graphDriverOptions, fmt.Sprintf("%s.ignore_chown_errors=true", StorageDriverOverlay)) } return &thirdparty.StoreOptions{