docker: make docker volume accept all global options

Fixes #8401
This commit is contained in:
Nick Craig-Wood 2025-02-17 20:24:26 +00:00
parent 661027f2cf
commit e64eb71023
1 changed files with 23 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package docker package docker
import ( import (
"context"
"fmt" "fmt"
"strings" "strings"
@ -112,6 +113,7 @@ func (vol *Volume) applyOptions(volOpt VolOpts) error {
} }
mntMap := configmap.Simple{} mntMap := configmap.Simple{}
vfsMap := configmap.Simple{} vfsMap := configmap.Simple{}
globalMap := configmap.Simple{}
for key := range opt { for key := range opt {
var ok bool var ok bool
var err error var err error
@ -144,6 +146,13 @@ func (vol *Volume) applyOptions(volOpt VolOpts) error {
ok = true 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 { if !ok {
// try as a backend option in fsOpt (backends use "_" instead of "-") // 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) 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 // build remote string from fsName, fsType, fsOpt, fsPath
colon := ":" colon := ":"
comma := "," comma := ","