Unable to start Docker Service in Ubuntu 16.04

Well, finally I fixed it

Everything you have to do is to load a different storage-driver in my case I will use overlay:

  1. Disable Docker service: sudo systemctl stop docker.service
  2. Start Docker Daemon (overlay driver): sudo docker daemon -s overlay
  3. Run Demo container: sudo docker run hello-world

In order to make these changes permanent, you must edit /etc/default/docker file and add the option:

DOCKER_OPTS="-s overlay"

Next time Docker service get loaded, it will run docker daemon -s overlay


The following unmasking commands worked for me (Ubuntu 18). Hope it helps someone out there... :-)

sudo systemctl unmask docker.service
sudo systemctl unmask docker.socket
sudo systemctl start docker.service

Update

It seems that in newer versions of docker and Ubuntu the unit file for docker is simply masked (pointing to /dev/null).
You can verify it by running the following commands in the terminal:

sudo file /lib/systemd/system/docker.service
sudo file /lib/systemd/system/docker.socket

You should see that the unit file symlinks to /dev/null.
In this case, all you have to do is follow S34N's suggestion, and run:

sudo systemctl unmask docker.service
sudo systemctl unmask docker.socket
sudo systemctl start docker.service
sudo systemctl status docker

I'll also keep the original post, that answers the error log stating that the storage driver should be replaced:

Original Post

I had the same problem, and I tried fixing it with Salva Cort's suggestion, but printing /etc/default/docker says:

# THIS FILE DOES NOT APPLY TO SYSTEMD

So here's a permanent fix that works for systemd (Ubuntu 15.04 and higher):

  1. create a new file /etc/systemd/system/docker.service.d/overlay.conf with the following content:

    [Service]
    ExecStart=
    ExecStart=/usr/bin/docker daemon -H fd:// -s overlay
    
  2. flush changes by executing:

    sudo systemctl daemon-reload
    
  3. verify that the configuration has been loaded:

    systemctl show --property=ExecStart docker
    
  4. restart docker:

    sudo systemctl restart docker
    

I had the same problem after upgrade docker from 17.05-ce to 17.06-ce via docker-machine

  1. Update /etc/systemd/system/docker.service.d/10-machine.conf

    replace

    `docker daemon` => `dockerd`
    

    example from

    [Service]
    ExecStart=
    ExecStart=/usr/bin/docker deamon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver aufs --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic
    Environment=
    

    to

    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver aufs --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic
    Environment=
    
  2. flush changes by executing:

    sudo systemctl daemon-reload
    
  3. restart docker:

    sudo systemctl restart docker