Files
operating-system/buildroot-patches/0005-docker-engine-add-support-for-init-processes.patch
2018-03-09 22:35:57 +01:00

93 lines
2.8 KiB
Diff

From 16fc5c50a96aad21f8f6b8db202269cc8fee1c36 Mon Sep 17 00:00:00 2001
From: Christian Stewart <christian@paral.in>
Date: Tue, 9 May 2017 18:03:55 -0400
Subject: [PATCH] docker-engine: add support for init processes
When a docker container is run with the --init flag, the Docker engine
uses the docker-init binary as PID 1 inside the container. This is
necessary in may cases to avoid issues with signal handling, zombie
processes, and other quirks when running as PID 1.
The docker-init binary is backed by tini on default, but optionally can
be changed to docker-init by user preference.
Furthermore, this patch fixes the following Docker error:
dockerd: level=warning msg="failed to retrieve docker-init version"
Signed-off-by: Christian Stewart <christian@paral.in>
---
package/docker-engine/Config.in | 26 ++++++++++++++++++++++++++
package/docker-engine/docker-engine.mk | 11 +++++++++++
2 files changed, 37 insertions(+)
diff --git a/package/docker-engine/Config.in b/package/docker-engine/Config.in
index 05670a7..7d9a87f 100644
--- a/package/docker-engine/Config.in
+++ b/package/docker-engine/Config.in
@@ -33,6 +33,32 @@ config BR2_PACKAGE_DOCKER_ENGINE_STATIC_CLIENT
if BR2_PACKAGE_DOCKER_ENGINE_DAEMON
+choice
+ bool "docker-init to use"
+ default BR2_PACKAGE_DOCKER_ENGINE_INIT_TINI
+ help
+ The docker engine uses a minimal init process as PID 1
+ inside containers. There are several implementations
+ of this init process.
+
+config BR2_PACKAGE_DOCKER_ENGINE_INIT_TINI
+ bool "tini"
+ select BR2_PACKAGE_TINI
+ help
+ Use Tini as the container init process.
+
+ https://github.com/krallin/tini
+
+config BR2_PACKAGE_DOCKER_ENGINE_INIT_DUMB_INIT
+ bool "dumb-init"
+ select BR2_PACKAGE_DUMB_INIT
+ help
+ Use dumb-init as the container init process.
+
+ https://github.com/Yelp/dumb-init
+
+endchoice
+
config BR2_PACKAGE_DOCKER_ENGINE_DRIVER_BTRFS
bool "btrfs filesystem driver"
depends on BR2_USE_MMU # btrfs-progs
diff --git a/package/docker-engine/docker-engine.mk b/package/docker-engine/docker-engine.mk
index 8928f07..a2776ed 100644
--- a/package/docker-engine/docker-engine.mk
+++ b/package/docker-engine/docker-engine.mk
@@ -50,6 +50,13 @@ endif
ifeq ($(BR2_PACKAGE_DOCKER_ENGINE_DAEMON),y)
DOCKER_ENGINE_BUILD_TAGS += daemon
DOCKER_ENGINE_BUILD_TARGETS += dockerd
+
+ifeq ($(BR2_PACKAGE_DOCKER_ENGINE_INIT_DUMB_INIT),y)
+DOCKER_ENGINE_INIT = dumb-init
+else
+DOCKER_ENGINE_INIT = tini
+endif
+
endif
ifeq ($(BR2_PACKAGE_DOCKER_ENGINE_EXPERIMENTAL),y)
@@ -119,6 +126,10 @@ define DOCKER_ENGINE_INSTALL_TARGET_CMDS
$(foreach target,$(DOCKER_ENGINE_BUILD_TARGETS), \
$(INSTALL) -D -m 0755 $(@D)/bin/$(target) $(TARGET_DIR)/usr/bin/$(target)
)
+
+ $(if $(filter $(BR2_PACKAGE_DOCKER_ENGINE_DAEMON),y), \
+ ln -fs $(DOCKER_ENGINE_INIT) $(TARGET_DIR)/usr/bin/docker-init
+ )
endef
$(eval $(generic-package))
--
2.9.0.windows.1