Skip to content

Finally update "dind" wrapper to the latest commit #110

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 8, 2018

Conversation

tianon
Copy link
Member

@tianon tianon commented May 8, 2018

Users on versions older than 1.8 should probably upgrade at this point.

Using something like -v /sys/fs/cgroup:/sys/fs/cgroup on 1.6 and 1.7 is probably the only workaround to this update.

For reference:

$ GIT_PAGER=cat git diff 3b5fac462d21ca164b3778647420016315289034...52379fa76dee07ca038624d639d9e14f4fb719ff -- hack/dind
diff --git a/hack/dind b/hack/dind
index a8c09283f6..3254f9dbe7 100755
--- a/hack/dind
+++ b/hack/dind
@@ -1,11 +1,11 @@
-#!/bin/bash
+#!/usr/bin/env bash
 set -e

 # DinD: a wrapper script which allows docker to be run inside a docker container.
 # Original version by Jerome Petazzoni <[email protected]>
 # See the blog post: https://blog.docker.com/2013/09/docker-can-now-run-within-docker/
 #
-# This script should be executed inside a docker container in privilieged mode
+# This script should be executed inside a docker container in privileged mode
 # ('docker run --privileged', introduced in docker 0.6).

 # Usage: dind CMD [ARG...]
@@ -13,74 +13,6 @@ set -e
 # apparmor sucks and Docker needs to know that it's in a container (c) @tianon
 export container=docker

-# as of docker 1.8, cgroups will be mounted in the container
-if ! mountpoint -q /sys/fs/cgroup; then
-
-	# First, make sure that cgroups are mounted correctly.
-	CGROUP=/cgroup
-
-	mkdir -p "$CGROUP"
-
-	if ! mountpoint -q "$CGROUP"; then
-		mount -n -t tmpfs -o uid=0,gid=0,mode=0755 cgroup $CGROUP || {
-			echo >&2 'Could not make a tmpfs mount. Did you use --privileged?'
-			exit 1
-		}
-	fi
-
-	# Mount the cgroup hierarchies exactly as they are in the parent system.
-	for HIER in $(cut -d: -f2 /proc/1/cgroup); do
-
-		SUBSYSTEMS="${HIER%name=*}"
-
-		# If cgroup hierarchy is named(mounted with "-o name=foo") we
-		# need to mount it in $CGROUP/foo to create exect same
-		# directoryes as on host. Else we need to mount it as is e.g.
-		# "subsys1,subsys2" if it has two subsystems
-
-		# Named, control-less cgroups are mounted with "-o name=foo"
-		# (and appear as such under /proc/<pid>/cgroup) but are usually
-		# mounted on a directory named "foo" (without the "name=" prefix).
-		# Systemd and OpenRC (and possibly others) both create such a
-		# cgroup. So just mount them on directory $CGROUP/foo.
-
-		OHIER=$HIER
-		HIER="${HIER#*name=}"
-
-		mkdir -p "$CGROUP/$HIER"
-
-		if ! mountpoint -q "$CGROUP/$HIER"; then
-			mount -n -t cgroup -o "$OHIER" cgroup "$CGROUP/$HIER"
-		fi
-
-		# Likewise, on at least one system, it has been reported that
-		# systemd would mount the CPU and CPU accounting controllers
-		# (respectively "cpu" and "cpuacct") with "-o cpuacct,cpu"
-		# but on a directory called "cpu,cpuacct" (note the inversion
-		# in the order of the groups). This tries to work around it.
-
-		if [ "$HIER" = 'cpuacct,cpu' ]; then
-			ln -s "$HIER" "$CGROUP/cpu,cpuacct"
-		fi
-
-		# If hierarchy has multiple subsystems, in /proc/<pid>/cgroup
-		# we will see ":subsys1,subsys2,subsys3,name=foo:" substring,
-		# we need to mount it to "$CGROUP/foo" and if there were no
-		# name to "$CGROUP/subsys1,subsys2,subsys3", so we must create
-		# symlinks for docker daemon to find these subsystems:
-		# ln -s $CGROUP/foo $CGROUP/subsys1
-		# ln -s $CGROUP/subsys1,subsys2,subsys3 $CGROUP/subsys1
-
-		if [ "$SUBSYSTEMS" != "${SUBSYSTEMS//,/ }" ]; then
-			SUBSYSTEMS="${SUBSYSTEMS//,/ }"
-			for SUBSYS in $SUBSYSTEMS
-			do
-				ln -s "$CGROUP/$HIER" "$CGROUP/$SUBSYS"
-			done
-		fi
-	done
-fi
-
 if [ -d /sys/kernel/security ] && ! mountpoint -q /sys/kernel/security; then
 	mount -t securityfs none /sys/kernel/security || {
 		echo >&2 'Could not mount /sys/kernel/security.'
@@ -88,16 +20,6 @@ if [ -d /sys/kernel/security ] && ! mountpoint -q /sys/kernel/security; then
 	}
 fi

-# Note: as I write those lines, the LXC userland tools cannot setup
-# a "sub-container" properly if the "devices" cgroup is not in its
-# own hierarchy. Let's detect this and issue a warning.
-if ! grep -q :devices: /proc/1/cgroup; then
-	echo >&2 'WARNING: the "devices" cgroup should be in its own hierarchy.'
-fi
-if ! grep -qw devices /proc/1/cgroup; then
-	echo >&2 'WARNING: it looks like the "devices" cgroup is not mounted.'
-fi
-
 # Mount /tmp (conditionally)
 if ! mountpoint -q /tmp; then
 	mount -t tmpfs none /tmp

@tianon
Copy link
Member Author

tianon commented May 8, 2018

Sorry @yosifkit, this doesn't help with docker run --rm docker:dind --help, but docker run --rm docker dockerd --help should be a reasonable substitute (you'll just get a friendly little clippy note along with it).

Users on versions older than 1.8 should probably upgrade at this point.

Using something like `-v /sys/fs/cgroup:/sys/fs/cgroup` on 1.6 and 1.7 is probably the only workaround to this update.

For reference:

```diff
$ GIT_PAGER=cat git diff 3b5fac462d21ca164b3778647420016315289034...52379fa76dee07ca038624d639d9e14f4fb719ff -- hack/dind
diff --git a/hack/dind b/hack/dind
index a8c09283f6..3254f9dbe7 100755
--- a/hack/dind
+++ b/hack/dind
@@ -1,11 +1,11 @@
-#!/bin/bash
+#!/usr/bin/env bash
 set -e

 # DinD: a wrapper script which allows docker to be run inside a docker container.
 # Original version by Jerome Petazzoni <[email protected]>
 # See the blog post: https://blog.docker.com/2013/09/docker-can-now-run-within-docker/
 #
-# This script should be executed inside a docker container in privilieged mode
+# This script should be executed inside a docker container in privileged mode
 # ('docker run --privileged', introduced in docker 0.6).

 # Usage: dind CMD [ARG...]
@@ -13,74 +13,6 @@ set -e
 # apparmor sucks and Docker needs to know that it's in a container (c) @tianon
 export container=docker

-# as of docker 1.8, cgroups will be mounted in the container
-if ! mountpoint -q /sys/fs/cgroup; then
-
-	# First, make sure that cgroups are mounted correctly.
-	CGROUP=/cgroup
-
-	mkdir -p "$CGROUP"
-
-	if ! mountpoint -q "$CGROUP"; then
-		mount -n -t tmpfs -o uid=0,gid=0,mode=0755 cgroup $CGROUP || {
-			echo >&2 'Could not make a tmpfs mount. Did you use --privileged?'
-			exit 1
-		}
-	fi
-
-	# Mount the cgroup hierarchies exactly as they are in the parent system.
-	for HIER in $(cut -d: -f2 /proc/1/cgroup); do
-
-		SUBSYSTEMS="${HIER%name=*}"
-
-		# If cgroup hierarchy is named(mounted with "-o name=foo") we
-		# need to mount it in $CGROUP/foo to create exect same
-		# directoryes as on host. Else we need to mount it as is e.g.
-		# "subsys1,subsys2" if it has two subsystems
-
-		# Named, control-less cgroups are mounted with "-o name=foo"
-		# (and appear as such under /proc/<pid>/cgroup) but are usually
-		# mounted on a directory named "foo" (without the "name=" prefix).
-		# Systemd and OpenRC (and possibly others) both create such a
-		# cgroup. So just mount them on directory $CGROUP/foo.
-
-		OHIER=$HIER
-		HIER="${HIER#*name=}"
-
-		mkdir -p "$CGROUP/$HIER"
-
-		if ! mountpoint -q "$CGROUP/$HIER"; then
-			mount -n -t cgroup -o "$OHIER" cgroup "$CGROUP/$HIER"
-		fi
-
-		# Likewise, on at least one system, it has been reported that
-		# systemd would mount the CPU and CPU accounting controllers
-		# (respectively "cpu" and "cpuacct") with "-o cpuacct,cpu"
-		# but on a directory called "cpu,cpuacct" (note the inversion
-		# in the order of the groups). This tries to work around it.
-
-		if [ "$HIER" = 'cpuacct,cpu' ]; then
-			ln -s "$HIER" "$CGROUP/cpu,cpuacct"
-		fi
-
-		# If hierarchy has multiple subsystems, in /proc/<pid>/cgroup
-		# we will see ":subsys1,subsys2,subsys3,name=foo:" substring,
-		# we need to mount it to "$CGROUP/foo" and if there were no
-		# name to "$CGROUP/subsys1,subsys2,subsys3", so we must create
-		# symlinks for docker daemon to find these subsystems:
-		# ln -s $CGROUP/foo $CGROUP/subsys1
-		# ln -s $CGROUP/subsys1,subsys2,subsys3 $CGROUP/subsys1
-
-		if [ "$SUBSYSTEMS" != "${SUBSYSTEMS//,/ }" ]; then
-			SUBSYSTEMS="${SUBSYSTEMS//,/ }"
-			for SUBSYS in $SUBSYSTEMS
-			do
-				ln -s "$CGROUP/$HIER" "$CGROUP/$SUBSYS"
-			done
-		fi
-	done
-fi
-
 if [ -d /sys/kernel/security ] && ! mountpoint -q /sys/kernel/security; then
 	mount -t securityfs none /sys/kernel/security || {
 		echo >&2 'Could not mount /sys/kernel/security.'
@@ -88,16 +20,6 @@ if [ -d /sys/kernel/security ] && ! mountpoint -q /sys/kernel/security; then
 	}
 fi

-# Note: as I write those lines, the LXC userland tools cannot setup
-# a "sub-container" properly if the "devices" cgroup is not in its
-# own hierarchy. Let's detect this and issue a warning.
-if ! grep -q :devices: /proc/1/cgroup; then
-	echo >&2 'WARNING: the "devices" cgroup should be in its own hierarchy.'
-fi
-if ! grep -qw devices /proc/1/cgroup; then
-	echo >&2 'WARNING: it looks like the "devices" cgroup is not mounted.'
-fi
-
 # Mount /tmp (conditionally)
 if ! mountpoint -q /tmp; then
 	mount -t tmpfs none /tmp
```
@tianon tianon merged commit 5b74deb into docker-library:master May 8, 2018
@tianon tianon deleted the latest-dind branch May 8, 2018 19:39
tianon added a commit to infosiftr/stackbrew that referenced this pull request May 8, 2018
- `docker`: docker-library/docker#110 (updated `dind` wrapper)
- `ghost`: 1.22.6
- `mariadb`: MariaDB/mariadb-docker#161 (remove unnecessary `FLUSH PRIVILEGES`)
- `openjdk`: `debian 11~12-1`, `debian 10.0.1+10-4`
- `postgres`: docker-library/postgres#440 (listen only on the unix socket during initdb)
- `tomcat`: 8.5.31, 9.0.8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant