kernel.rst 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. :title: Kernel Requirements
  2. :description: Kernel supports
  3. :keywords: kernel requirements, kernel support, docker, installation, cgroups, namespaces
  4. .. _kernel:
  5. Kernel Requirements
  6. ===================
  7. In short, Docker has the following kernel requirements:
  8. - Linux version 3.8 or above.
  9. - Cgroups and namespaces must be enabled.
  10. *Note: as of 0.7 docker no longer requires aufs. AUFS support is still available as an optional driver.*
  11. The officially supported kernel is the one recommended by the
  12. :ref:`ubuntu_linux` installation path. It is the one that most developers
  13. will use, and the one that receives the most attention from the core
  14. contributors. If you decide to go with a different kernel and hit a bug,
  15. please try to reproduce it with the official kernels first.
  16. If you cannot or do not want to use the "official" kernels,
  17. here is some technical background about the features (both optional and
  18. mandatory) that docker needs to run successfully.
  19. Linux version 3.8 or above
  20. --------------------------
  21. Kernel versions 3.2 to 3.5 are not stable when used with docker.
  22. In some circumstances, you will experience kernel "oopses", or even crashes.
  23. The symptoms include:
  24. - a container being killed in the middle of an operation (e.g. an ``apt-get``
  25. command doesn't complete);
  26. - kernel messages including mentioning calls to ``mntput`` or
  27. ``d_hash_and_lookup``;
  28. - kernel crash causing the machine to freeze for a few minutes, or even
  29. completely.
  30. Additionally, kernels prior 3.4 did not implement ``reboot_pid_ns``,
  31. which means that the ``reboot()`` syscall could reboot the host machine,
  32. instead of terminating the container. To work around that problem,
  33. LXC userland tools (since version 0.8) automatically drop the ``SYS_BOOT``
  34. capability when necessary. Still, if you run a pre-3.4 kernel with pre-0.8
  35. LXC tools, be aware that containers can reboot the whole host! This is
  36. not something that Docker wants to address in the short term, since you
  37. shouldn't use kernels prior 3.8 with Docker anyway.
  38. While it is still possible to use older kernels for development, it is
  39. really not advised to do so.
  40. Docker checks the kernel version when it starts, and emits a warning if it
  41. detects something older than 3.8.
  42. See issue `#407 <https://github.com/dotcloud/docker/issues/407>`_ for details.
  43. Cgroups and namespaces
  44. ----------------------
  45. You need to enable namespaces and cgroups, to the extent of what is needed
  46. to run LXC containers. Technically, while namespaces have been introduced
  47. in the early 2.6 kernels, we do not advise to try any kernel before 2.6.32
  48. to run LXC containers. Note that 2.6.32 has some documented issues regarding
  49. network namespace setup and teardown; those issues are not a risk if you
  50. run containers in a private environment, but can lead to denial-of-service
  51. attacks if you want to run untrusted code in your containers. For more details,
  52. see `LP#720095 <https://bugs.launchpad.net/ubuntu/+source/linux/+bug/720095>`_.
  53. Kernels 2.6.38, and every version since 3.2, have been deployed successfully
  54. to run containerized production workloads. Feature-wise, there is no huge
  55. improvement between 2.6.38 and up to 3.6 (as far as docker is concerned!).
  56. Extra Cgroup Controllers
  57. ------------------------
  58. Most control groups can be enabled or disabled individually. For instance,
  59. you can decide that you do not want to compile support for the CPU or memory
  60. controller. In some cases, the feature can be enabled or disabled at boot
  61. time. It is worth mentioning that some distributions (like Debian) disable
  62. "expensive" features, like the memory controller, because they can have
  63. a significant performance impact.
  64. In the specific case of the memory cgroup, docker will detect if the cgroup
  65. is available or not. If it's not, it will print a warning, and it won't
  66. use the feature. If you want to enable that feature -- read on!
  67. Memory and Swap Accounting on Debian/Ubuntu
  68. -------------------------------------------
  69. If you use Debian or Ubuntu kernels, and want to enable memory and swap
  70. accounting, you must add the following command-line parameters to your kernel::
  71. cgroup_enable=memory swapaccount=1
  72. On Debian or Ubuntu systems, if you use the default GRUB bootloader, you can
  73. add those parameters by editing ``/etc/default/grub`` and extending
  74. ``GRUB_CMDLINE_LINUX``. Look for the following line::
  75. GRUB_CMDLINE_LINUX=""
  76. And replace it by the following one::
  77. GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
  78. Then run ``update-grub``, and reboot.