mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
![Sebastiaan van Stijn](/assets/img/avatar_default.png)
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 8db61095a3
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>
72 lines
1.8 KiB
Text
72 lines
1.8 KiB
Text
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
|