diff --git a/cmd/serve/docker/options.go b/cmd/serve/docker/options.go index e45820af7..087eebc65 100644 --- a/cmd/serve/docker/options.go +++ b/cmd/serve/docker/options.go @@ -1,6 +1,7 @@ package docker import ( + "context" "fmt" "strings" @@ -112,6 +113,7 @@ func (vol *Volume) applyOptions(volOpt VolOpts) error { } mntMap := configmap.Simple{} vfsMap := configmap.Simple{} + globalMap := configmap.Simple{} for key := range opt { var ok bool var err error @@ -144,6 +146,13 @@ func (vol *Volume) applyOptions(volOpt VolOpts) error { ok = true } } + if !ok { + // try as a global option in globalMap + if fs.ConfigOptionsInfo.Get(underscoreKey) != nil { + globalMap[underscoreKey] = vol.Options[key] + ok = true + } + } if !ok { // try as a backend option in fsOpt (backends use "_" instead of "-") @@ -172,6 +181,20 @@ func (vol *Volume) applyOptions(volOpt VolOpts) error { return fmt.Errorf("cannot parse mount options: %w", err) } + // Parse Global options + if len(globalMap) > 0 { + ctx := context.Background() + ci := fs.GetConfig(ctx) + err = configstruct.Set(globalMap, ci) + if err != nil { + return fmt.Errorf("cannot parse global options: %w", err) + } + err = ci.Reload(ctx) + if err != nil { + return fmt.Errorf("failed to reload global options: %w", err) + } + } + // build remote string from fsName, fsType, fsOpt, fsPath colon := ":" comma := ","