Skip to content

Commit 5f8600f

Browse files
committed
docker-container: set UsernsMode only when needed
Set `UsernsMode="host"` only when the daemon is running in userns-remapping mode. Fix issue 561 The issue will be also fixed in moby/moby PR 43084 (Docker 20.10.13). This buildx PR helps users of old releases of Docker. Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
1 parent 33c121d commit 5f8600f

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

driver/docker-container/driver.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const (
3737
type Driver struct {
3838
driver.InitConfig
3939
factory driver.Factory
40+
userNSRemap bool // true if dockerd is running with userns-remap mode
4041
netMode string
4142
image string
4243
cgroupParent string
@@ -112,7 +113,6 @@ func (d *Driver) create(ctx context.Context, l progress.SubLogger) error {
112113
if err := l.Wrap("creating container "+d.Name, func() error {
113114
hc := &container.HostConfig{
114115
Privileged: true,
115-
UsernsMode: "host",
116116
Mounts: []mount.Mount{
117117
{
118118
Type: mount.TypeVolume,
@@ -121,6 +121,9 @@ func (d *Driver) create(ctx context.Context, l progress.SubLogger) error {
121121
},
122122
},
123123
}
124+
if d.userNSRemap {
125+
hc.UsernsMode = "host"
126+
}
124127
if d.netMode != "" {
125128
hc.NetworkMode = container.NetworkMode(d.netMode)
126129
}

driver/docker-container/factory.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"strings"
77

88
"github.com/docker/buildx/driver"
9+
dockertypes "github.com/docker/docker/api/types"
910
dockerclient "github.com/docker/docker/client"
1011
"github.com/pkg/errors"
1112
)
@@ -40,6 +41,20 @@ func (f *factory) New(ctx context.Context, cfg driver.InitConfig) (driver.Driver
4041
return nil, errors.Errorf("%s driver requires docker API access", f.Name())
4142
}
4243
d := &Driver{factory: f, InitConfig: cfg}
44+
dockerInfo, err := cfg.DockerAPI.Info(ctx)
45+
if err != nil {
46+
return nil, err
47+
}
48+
secOpts, err := dockertypes.DecodeSecurityOptions(dockerInfo.SecurityOptions)
49+
if err != nil {
50+
return nil, err
51+
}
52+
for _, f := range secOpts {
53+
if f.Name == "userns" {
54+
d.userNSRemap = true
55+
break
56+
}
57+
}
4358
for k, v := range cfg.DriverOpts {
4459
switch {
4560
case k == "network":

0 commit comments

Comments
 (0)