1

i've this docker sh service script in /etc/init.d on a debain 8 machine:

#!/bin/sh
set -e

### BEGIN INIT INFO
# Provides:           docker
# Required-Start:     $syslog $remote_fs
# Required-Stop:      $syslog $remote_fs
# Should-Start:       cgroupfs-mount cgroup-lite
# Should-Stop:        cgroupfs-mount cgroup-lite
# Default-Start:      2 3 4 5
# Default-Stop:       0 1 6
# Short-Description:  Create lightweight, portable, self-sufficient containers.
# Description:
#  Docker is an open-source project to easily create lightweight, portable,
#  self-sufficient containers from any application. The same container that a
#  developer builds and tests on a laptop can run at scale, in production, on
#  VMs, bare metal, OpenStack clusters, public clouds and more.
### END INIT INFO

export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

BASE=docker

# modify these in /etc/default/$BASE (/etc/default/docker)
DOCKER=/usr/bin/$BASE
# This is the pid file managed by docker itself
DOCKER_PIDFILE=/var/run/$BASE.pid
# This is the pid file created/managed by start-stop-daemon
DOCKER_SSD_PIDFILE=/var/run/$BASE-ssd.pid
DOCKER_LOGFILE=/var/log/$BASE.log
DOCKER_DESC="Docker"
DOCKER_OPTS="--insecure-registry 127.0.0.1:9000"

# Get lsb functions
. /lib/lsb/init-functions

if [ -f /etc/default/$BASE ]; then
    . /etc/default/$BASE
fi

# Check docker is present
if [ ! -x $DOCKER ]; then
    log_failure_msg "$DOCKER not present or not executable"
    exit 1
fi

check_init() {
     # see also init_is_upstart in /lib/lsb/init-functions (which isn't available in Ubuntu 12.04, or we'd use it directly)
     if [ -x /sbin/initctl ] && /sbin/initctl version 2>/dev/null | grep -q upstart; then        
                log_failure_msg "$DOCKER_DESC is managed via upstart, try using service $BASE $1"
                exit 1
         fi
}

fail_unless_root() {
    if [ "$(id -u)" != '0' ]; then
        log_failure_msg "$DOCKER_DESC must be run as root"
        exit 1
    fi
}

cgroupfs_mount() {
    # 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
        return
    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
    )
}
echo -n "$1"

case "$1" in
    start)
        echo "start"
        check_init

        fail_unless_root

        cgroupfs_mount

        touch "$DOCKER_LOGFILE"
        chgrp docker "$DOCKER_LOGFILE"

        ulimit -n 1048576
        if [ "$BASH" ]; then
            ulimit -u 1048576
        else
            ulimit -p 1048576
        fi

        echo $DOCKER_OPTS
        log_begin_msg "Starting $DOCKER_DESC: $BASE"
        start-stop-daemon --start --background \
            --no-close \
            --exec "$DOCKER" \
            --pidfile "$DOCKER_SSD_PIDFILE" \
            --make-pidfile \
            -- \
                daemon -p "$DOCKER_PIDFILE" \
                $DOCKER_OPTS \
                    >> "$DOCKER_LOGFILE" 2>&1
        log_end_msg $?
        ;;

    stop)
        check_init
        fail_unless_root
        log_begin_msg "Stopping $DOCKER_DESC: $BASE"
        start-stop-daemon --stop --pidfile "$DOCKER_SSD_PIDFILE" --retry 10
        log_end_msg $?
        ;;

    restart)
        check_init
        fail_unless_root
        docker_pid=`cat "$DOCKER_SSD_PIDFILE" 2>/dev/null`
        [ -n "$docker_pid" ] \
            && ps -p $docker_pid > /dev/null 2>&1 \
            && $0 stop
        $0 start
        ;;

    force-reload)
        check_init
        fail_unless_root
        $0 restart
        ;;

    status)
        echo "Prova"
        check_init
        status_of_proc -p "$DOCKER_SSD_PIDFILE" "$DOCKER" "$DOCKER_DESC"
        echo "a"
        ;;
    statu)
                echo "Prova"
                check_init
                status_of_proc -p "$DOCKER_SSD_PIDFILE" "$DOCKER" "$DOCKER_DESC"
                echo "a"
                ;;
    *)
        echo "Usage: service docker {start|stop|restart|status} PIPPO"
        exit 1
        ;;
esac

the problem with this is that it doesn't pass the DOCKER_OPTS value to the start-stop-daemon section in start section (or at least they don't work and don't appear in the command of the resulting process in ps aux output).

We've tried to put the DOCKER_OPTS directly in the script as well as let it been read on the default config file but the result is the same, the options doesn't make any effect.

If we try to launch the process with start-stop-daemon directly form terminal with the same options it work just fine.

What can be the reason of this ?

On a side note, we also try to play with the script a bit and found this strage situation:

we made a copy of the status section called statu, then we call booth and they give us different results.

status :

● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled)
   Active: active (running) since Thu 2016-02-25 12:40:43 CET; 4min 35s ago
     Docs: https://docs.docker.com

statu: [FAIL[....] Docker is not running ... failed!

Being the code the same this is quite a surprise !? Why is it so ?

bn89
  • 53
  • 1
  • 7

1 Answers1

0

Systemd doesn't use the scripts in /etc/init.d. From your output, it's using the package default configuration in /lib/systemd/system/docker.service. If you want to make changes:

# make a local copy, /lib/systemd can be overwritten on an application upgrade
cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service

# edit /etc/systemd/system/docker.service

systemctl daemon-reload # updates systemd from files on the disk
systemctl restart docker # restart the service with your changes
BMitch
  • 231,797
  • 42
  • 475
  • 450