After upgrade to docker-ce, Containers will not start

after upgrading from docker version 1.12 to docker-ce v 17.09, and restarting docker, the exited containers that were running in docker 1.12 show up with docker ps -a and docker images, but the containers cannot be started.

[root@localhost ~]# docker start ir-ms
Error response from daemon: Unknown runtime specified docker-runc
Error: failed to start containers: ir-ms

The docker service appears to be running normally:
[root@localhost ~]# ps aux | grep docker
root 8545 0.7 0.4 834608 38340 ? Ssl 01:30 0:14 /usr/bin/dockerd
root 8555 0.1 0.1 736196 11932 ? Ssl 01:30 0:02 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc --debug

[root@localhost ~]# service docker status
Redirecting to /bin/systemctl status  docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/docker.service.d
           └─http-proxy.conf
   Active: active (running) since Tue 2017-10-24 01:30:11 EDT; 31min ago
     Docs: https://docs.docker.com
 Main PID: 8545 (dockerd)
   Memory: 45.0M
   CGroup: /system.slice/docker.service
           β”œβ”€8545 /usr/bin/dockerd
           └─8555 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim ...

I know that the containers are compatible between the two versions because I was able to upgrade on another centos system from v1.12 to docker-ce and the containers auto stared upon docker start.

[root@localhost ~]# docker version
Client:
Version: 17.09.0-ce
API version: 1.32
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:41:23 2017
OS/Arch: linux/amd64

Server:
Version: 17.09.0-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:42:49 2017
OS/Arch: linux/amd64
Experimental: false

my solution was to simply re-run and start new containers using docker-ce because apparently the existing containers were not compatible with docker-ce

1 Like

For me docker had docker-runc before which later changed to runrc
you can verify this comparing new and old containers runtime configuration
docker inspect container_name | grep Runtime
you can manually update this by editing old container config file for me it was in /var/lib/docker/containers/xxxxhashxxxx/hostconfig.json
changing "Runtime"
I used something like
sed 's/docker-runc/runc/g' /var/lib/docker/containers/xxxxhashxxxx/hostconfig.json

restart docker service and start old containers

i know this.
first into:cd /var/lib/docker/containers/
second run :sed -i β€œs/docker-runc//g” grep -rl "docker-runc" .
third: systemctl restart docker
u will see the container is running.

1 Like

Another solution if you don’t want to change all your containers is to run sudo ln -s /usr/bin/runc /usr/bin/docker-runc

1 Like