Skip to content

Commit dba0109

Browse files
committed
docker-container: mount driver-opt
Signed-off-by: CrazyMax <[email protected]>
1 parent fe4f8c1 commit dba0109

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

driver/docker-container/driver.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ type Driver struct {
5757
env []string
5858
defaultLoad bool
5959
gpus []container.DeviceRequest
60+
mounts map[string]string
6061
}
6162

6263
func (d *Driver) IsMobyDriver() bool {
@@ -137,6 +138,15 @@ func (d *Driver) create(ctx context.Context, l progress.SubLogger) error {
137138
},
138139
}
139140

141+
for k, v := range d.mounts {
142+
mounts = append(mounts, mount.Mount{
143+
Type: mount.TypeBind,
144+
Source: k,
145+
Target: v,
146+
ReadOnly: true,
147+
})
148+
}
149+
140150
// Mount WSL libaries if running in WSL environment and Docker context
141151
// is a local socket as requesting GPU on container builder creation
142152
// is not enough when generating the CDI specification for GPU devices.

driver/docker-container/factory.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,15 @@ func (f *factory) New(ctx context.Context, cfg driver.InitConfig) (driver.Driver
111111
return nil, errors.Errorf("invalid env option %q, expecting env.FOO=bar", k)
112112
}
113113
d.env = append(d.env, fmt.Sprintf("%s=%s", envName, v))
114+
case strings.HasPrefix(k, "mount."):
115+
mountSrc := strings.TrimPrefix(k, "mount.")
116+
if mountSrc == "" {
117+
return nil, errors.Errorf("invalid mount option %q, expecting mount.<src>=<dest>", k)
118+
}
119+
if d.mounts == nil {
120+
d.mounts = make(map[string]string)
121+
}
122+
d.mounts[mountSrc] = v
114123
default:
115124
return nil, errors.Errorf("invalid driver option %s for docker-container driver", k)
116125
}

tests/create.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package tests
33
import (
44
"fmt"
55
"os"
6+
"path/filepath"
67
"strings"
78
"testing"
89

@@ -23,6 +24,7 @@ var createTests = []func(t *testing.T, sb integration.Sandbox){
2324
testCreateMemoryLimit,
2425
testCreateRestartAlways,
2526
testCreateRemoteContainer,
27+
testCreateMount,
2628
}
2729

2830
func testCreateMemoryLimit(t *testing.T, sb integration.Sandbox) {
@@ -108,3 +110,31 @@ func testCreateRemoteContainer(t *testing.T, sb integration.Sandbox) {
108110
}
109111
require.Fail(t, "remote builder is not running")
110112
}
113+
114+
func testCreateMount(t *testing.T, sb integration.Sandbox) {
115+
if !isDockerContainerWorker(sb) {
116+
t.Skip("only testing with docker-container worker")
117+
}
118+
119+
var builderName string
120+
t.Cleanup(func() {
121+
if builderName == "" {
122+
return
123+
}
124+
out, err := rmCmd(sb, withArgs(builderName))
125+
require.NoError(t, err, out)
126+
})
127+
128+
d, err := filepath.Abs(t.TempDir())
129+
require.NoError(t, err)
130+
131+
f := filepath.Join(d, "test.json")
132+
require.NoError(t, os.WriteFile(f, []byte(`{"test":{"foo":"bar"}}`), 0644))
133+
134+
out, err := createCmd(sb, withArgs("--driver", "docker-container", "--driver-opt", fmt.Sprintf(`mount.%s=/etc/buildkit/provenance.d/test.json`, f)))
135+
require.NoError(t, err, out)
136+
builderName = strings.TrimSpace(out)
137+
138+
out, err = inspectCmd(sb, withArgs(builderName, "--bootstrap"))
139+
require.NoError(t, err, out)
140+
}

0 commit comments

Comments
 (0)