docker 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #!/bin/sh
  2. ### BEGIN INIT INFO
  3. # Provides: docker
  4. # Required-Start: $syslog $remote_fs
  5. # Required-Stop: $syslog $remote_fs
  6. # Should-Start: cgroupfs-mount cgroup-lite
  7. # Should-Stop: cgroupfs-mount cgroup-lite
  8. # Default-Start: 2 3 4 5
  9. # Default-Stop: 0 1 6
  10. # Short-Description: Create lightweight, portable, self-sufficient containers.
  11. # Description:
  12. # Docker is an open-source project to easily create lightweight, portable,
  13. # self-sufficient containers from any application. The same container that a
  14. # developer builds and tests on a laptop can run at scale, in production, on
  15. # VMs, bare metal, OpenStack clusters, public clouds and more.
  16. ### END INIT INFO
  17. export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
  18. BASE=$(basename $0)
  19. # modify these in /etc/default/$BASE (/etc/default/docker)
  20. DOCKER=/usr/bin/$BASE
  21. DOCKER_PIDFILE=/var/run/$BASE.pid
  22. DOCKER_LOGFILE=/var/log/$BASE.log
  23. DOCKER_OPTS=
  24. DOCKER_DESC="Docker"
  25. # Get lsb functions
  26. . /lib/lsb/init-functions
  27. if [ -f /etc/default/$BASE ]; then
  28. . /etc/default/$BASE
  29. fi
  30. # see also init_is_upstart in /lib/lsb/init-functions (which isn't available in Ubuntu 12.04, or we'd use it)
  31. if [ -x /sbin/initctl ] && /sbin/initctl version 2>/dev/null | grep -q upstart; then
  32. log_failure_msg "$DOCKER_DESC is managed via upstart, try using service $BASE $1"
  33. exit 1
  34. fi
  35. # Check docker is present
  36. if [ ! -x $DOCKER ]; then
  37. log_failure_msg "$DOCKER not present or not executable"
  38. exit 1
  39. fi
  40. fail_unless_root() {
  41. if [ "$(id -u)" != '0' ]; then
  42. log_failure_msg "$DOCKER_DESC must be run as root"
  43. exit 1
  44. fi
  45. }
  46. cgroupfs_mount() {
  47. # see also https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount
  48. if grep -v '^#' /etc/fstab | grep -q cgroup \
  49. || [ ! -e /proc/cgroups ] \
  50. || [ ! -d /sys/fs/cgroup ]; then
  51. return
  52. fi
  53. if ! mountpoint -q /sys/fs/cgroup; then
  54. mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup
  55. fi
  56. (
  57. cd /sys/fs/cgroup
  58. for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do
  59. mkdir -p $sys
  60. if ! mountpoint -q $sys; then
  61. if ! mount -n -t cgroup -o $sys cgroup $sys; then
  62. rmdir $sys || true
  63. fi
  64. fi
  65. done
  66. )
  67. }
  68. case "$1" in
  69. start)
  70. fail_unless_root
  71. cgroupfs_mount
  72. touch "$DOCKER_LOGFILE"
  73. chgrp docker "$DOCKER_LOGFILE"
  74. log_begin_msg "Starting $DOCKER_DESC: $BASE"
  75. start-stop-daemon --start --background \
  76. --no-close \
  77. --exec "$DOCKER" \
  78. --pidfile "$DOCKER_PIDFILE" \
  79. -- \
  80. -d -p "$DOCKER_PIDFILE" \
  81. $DOCKER_OPTS \
  82. >> "$DOCKER_LOGFILE" 2>&1
  83. log_end_msg $?
  84. ;;
  85. stop)
  86. fail_unless_root
  87. log_begin_msg "Stopping $DOCKER_DESC: $BASE"
  88. start-stop-daemon --stop --pidfile "$DOCKER_PIDFILE"
  89. log_end_msg $?
  90. ;;
  91. restart)
  92. fail_unless_root
  93. docker_pid=`cat "$DOCKER_PIDFILE" 2>/dev/null`
  94. [ -n "$docker_pid" ] \
  95. && ps -p $docker_pid > /dev/null 2>&1 \
  96. && $0 stop
  97. $0 start
  98. ;;
  99. force-reload)
  100. fail_unless_root
  101. $0 restart
  102. ;;
  103. status)
  104. status_of_proc -p "$DOCKER_PIDFILE" "$DOCKER" docker
  105. ;;
  106. *)
  107. echo "Usage: $0 {start|stop|restart|status}"
  108. exit 1
  109. ;;
  110. esac
  111. exit 0