From 9391a822ea4bee60284b4b2eb3a6535e20492569 Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Thu, 12 Jan 2017 20:24:30 +0100 Subject: [PATCH] daemon: honor default runtime when starting containers If you created containers from pre-OCI docker (e.g. docker-1.10.x) upgrade may fail when restarting containers if the new docker daemon has `--default-runtime` set. In Fedora, we ship docker 1.12.6 with: ``` --default-runtime=oci --add-runtime oci=/usr/libexec/docker/docker-runc-current ``` That way we don't rely on `docker-runc` being in `$PATH`. The issue is, on upgrade from docker 1.10.3 without this patch, the default runtime in `daemon/start_linux.go` is unconditionally set to `runc=docker-runc` without honoring the `--default-runtime` flag set in the docker daemon. Reproducer: - (1.10.3) `docker run -d -p 5000:5000 --restart=always --name registry registry:2` - upgrade to docker 1.12.6 (1.11.x has likely the same issue) - the registry container fails to restart on upgrade with the following log message `error="exec: \"docker-runc\": executable file not found in $PATH: \"\""` That error comes from the fact that we're setting the runtime in the container's HostConfig to `runc` where instead we should have honored the `--default-runtime` flag (in our case that's set to `oci`). Signed-off-by: Antonio Murdaca --- daemon/start_unix.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/start_unix.go b/daemon/start_unix.go index 6bbe485075..103cc73b86 100644 --- a/daemon/start_unix.go +++ b/daemon/start_unix.go @@ -14,7 +14,7 @@ func (daemon *Daemon) getLibcontainerdCreateOptions(container *container.Contain // Ensure a runtime has been assigned to this container if container.HostConfig.Runtime == "" { - container.HostConfig.Runtime = stockRuntimeName + container.HostConfig.Runtime = daemon.configStore.GetDefaultRuntimeName() container.ToDisk() }