Skip to content
This repository was archived by the owner on Oct 13, 2023. It is now read-only.

Commit 9d98839

Browse files
Merge component 'engine' from [email protected]:docker/engine 19.03
2 parents 4588637 + 23743ee commit 9d98839

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

components/engine/contrib/dockerd-rootless.sh

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
# External dependencies:
88
# * newuidmap and newgidmap needs to be installed.
99
# * /etc/subuid and /etc/subgid needs to be configured for the current user.
10-
# * Either one of slirp4netns (v0.3+), VPNKit, lxc-user-nic needs to be installed.
10+
# * Either one of slirp4netns (>= v0.4.0), VPNKit, lxc-user-nic needs to be installed.
1111
# slirp4netns is used by default if installed. Otherwise fallsback to VPNKit.
1212
# The default value can be overridden with $DOCKERD_ROOTLESS_ROOTLESSKIT_NET=(slirp4netns|vpnkit|lxc-user-nic)
1313
#
@@ -37,27 +37,27 @@ fi
3737

3838
: "${DOCKERD_ROOTLESS_ROOTLESSKIT_NET:=}"
3939
: "${DOCKERD_ROOTLESS_ROOTLESSKIT_MTU:=}"
40-
# if slirp4netns v0.4.0+ is installed, slirp4netns is hardened using sandbox (mount namespace) and seccomp
4140
: "${DOCKERD_ROOTLESS_ROOTLESSKIT_SLIRP4NETNS_SANDBOX:=auto}"
4241
: "${DOCKERD_ROOTLESS_ROOTLESSKIT_SLIRP4NETNS_SECCOMP:=auto}"
4342
net=$DOCKERD_ROOTLESS_ROOTLESSKIT_NET
4443
mtu=$DOCKERD_ROOTLESS_ROOTLESSKIT_MTU
4544
if [ -z $net ]; then
4645
if which slirp4netns >/dev/null 2>&1; then
47-
if slirp4netns --help | grep -- --disable-host-loopback; then
46+
# If --netns-type is present in --help, slirp4netns is >= v0.4.0.
47+
if slirp4netns --help | grep -qw -- --netns-type; then
4848
net=slirp4netns
4949
if [ -z $mtu ]; then
5050
mtu=65520
5151
fi
5252
else
53-
echo "slirp4netns does not support --disable-host-loopback. Falling back to VPNKit."
53+
echo "slirp4netns found but seems older than v0.4.0. Falling back to VPNKit."
5454
fi
5555
fi
5656
if [ -z $net ]; then
5757
if which vpnkit >/dev/null 2>&1; then
5858
net=vpnkit
5959
else
60-
echo "Either slirp4netns (v0.3+) or vpnkit needs to be installed"
60+
echo "Either slirp4netns (>= v0.4.0) or vpnkit needs to be installed"
6161
exit 1
6262
fi
6363
fi

components/engine/pkg/archive/archive_linux.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,9 @@ func mknodChar0Overlay(cleansedOriginalPath string) error {
151151
if err := ioutil.WriteFile(lowerDummy, []byte{}, 0600); err != nil {
152152
return errors.Wrapf(err, "failed to create a dummy lower file %s", lowerDummy)
153153
}
154-
mOpts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lower, upper, work)
154+
// lowerdir needs ":" to be escaped: https://github.com/moby/moby/issues/40939#issuecomment-627098286
155+
lowerEscaped := strings.ReplaceAll(lower, ":", "\\:")
156+
mOpts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lowerEscaped, upper, work)
155157
// docker/pkg/mount.Mount() requires procfs to be mounted. So we use syscall.Mount() directly instead.
156158
if err := syscall.Mount("overlay", merged, "overlay", uintptr(0), mOpts); err != nil {
157159
return errors.Wrapf(err, "failed to mount overlay (%s) on %s", mOpts, merged)
@@ -236,7 +238,9 @@ func createDirWithOverlayOpaque(tmp string) (string, error) {
236238
if err := os.MkdirAll(lowerDummy, 0700); err != nil {
237239
return "", errors.Wrapf(err, "failed to create a dummy lower directory %s", lowerDummy)
238240
}
239-
mOpts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lower, upper, work)
241+
// lowerdir needs ":" to be escaped: https://github.com/moby/moby/issues/40939#issuecomment-627098286
242+
lowerEscaped := strings.ReplaceAll(lower, ":", "\\:")
243+
mOpts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lowerEscaped, upper, work)
240244
// docker/pkg/mount.Mount() requires procfs to be mounted. So we use syscall.Mount() directly instead.
241245
if err := syscall.Mount("overlay", merged, "overlay", uintptr(0), mOpts); err != nil {
242246
return "", errors.Wrapf(err, "failed to mount overlay (%s) on %s", mOpts, merged)

0 commit comments

Comments
 (0)