There is a not-insignificant performance overhead for all containers (if containerd is a child of Docker, which is the current setup) if rlimits are set on the main Docker daemon process (because the limits propogate to all children). We recommend using cgroups to do container-local accounting. This applies the change added in 8db61095a3d0bcb0733580734ba5d54bc27a614d to other init scripts. Note that nfile cannot be set to unlimited, and the limit is hardcoded to 1048576 (2^20) , see: http://stackoverflow.com/a/1213069/1811501 Signed-off-by: Sebastiaan van Stijn <github@gone.nl> Upstream-commit: 428d7337e808ec5f4dba1b0aceda002f295cc320 Component: engine
73 lines
1.8 KiB
Plaintext
73 lines
1.8 KiB
Plaintext
description "Docker daemon"
|
|
|
|
start on (filesystem and net-device-up IFACE!=lo)
|
|
stop on runlevel [!2345]
|
|
|
|
limit nofile 524288 1048576
|
|
|
|
# Having non-zero limits causes performance problems due to accounting overhead
|
|
# in the kernel. We recommend using cgroups to do container-local accounting.
|
|
limit nproc unlimited unlimited
|
|
|
|
respawn
|
|
|
|
kill timeout 20
|
|
|
|
pre-start script
|
|
# see also https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount
|
|
if grep -v '^#' /etc/fstab | grep -q cgroup \
|
|
|| [ ! -e /proc/cgroups ] \
|
|
|| [ ! -d /sys/fs/cgroup ]; then
|
|
exit 0
|
|
fi
|
|
if ! mountpoint -q /sys/fs/cgroup; then
|
|
mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup
|
|
fi
|
|
(
|
|
cd /sys/fs/cgroup
|
|
for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do
|
|
mkdir -p $sys
|
|
if ! mountpoint -q $sys; then
|
|
if ! mount -n -t cgroup -o $sys cgroup $sys; then
|
|
rmdir $sys || true
|
|
fi
|
|
fi
|
|
done
|
|
)
|
|
end script
|
|
|
|
script
|
|
# modify these in /etc/default/$UPSTART_JOB (/etc/default/docker)
|
|
DOCKERD=/usr/bin/dockerd
|
|
DOCKER_OPTS=
|
|
if [ -f /etc/default/$UPSTART_JOB ]; then
|
|
. /etc/default/$UPSTART_JOB
|
|
fi
|
|
exec "$DOCKERD" $DOCKER_OPTS --raw-logs
|
|
end script
|
|
|
|
# Don't emit "started" event until docker.sock is ready.
|
|
# See https://github.com/docker/docker/issues/6647
|
|
post-start script
|
|
DOCKER_OPTS=
|
|
DOCKER_SOCKET=
|
|
if [ -f /etc/default/$UPSTART_JOB ]; then
|
|
. /etc/default/$UPSTART_JOB
|
|
fi
|
|
|
|
if ! printf "%s" "$DOCKER_OPTS" | grep -qE -e '-H|--host'; then
|
|
DOCKER_SOCKET=/var/run/docker.sock
|
|
else
|
|
DOCKER_SOCKET=$(printf "%s" "$DOCKER_OPTS" | grep -oP -e '(-H|--host)\W*unix://\K(\S+)')
|
|
fi
|
|
|
|
if [ -n "$DOCKER_SOCKET" ]; then
|
|
while ! [ -e "$DOCKER_SOCKET" ]; do
|
|
initctl status $UPSTART_JOB | grep -qE "(stop|respawn)/" && exit 1
|
|
echo "Waiting for $DOCKER_SOCKET"
|
|
sleep 0.1
|
|
done
|
|
echo "$DOCKER_SOCKET is up"
|
|
fi
|
|
end script
|