265

I want to make a move to Docker, so I've just started to mess around with it. I've installed Docker on a VirtualBox Ubuntu 15.10 (Wily Werewolf) installation and as suggested here I then tried running a basic nginx Docker image:

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

So I checked out whether Docker was running:

$ sudo service docker status
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since vr 2015-11-06 08:41:48 CET; 15min ago
     Docs: https://docs.docker.com
 Main PID: 7542 (docker)
   CGroup: /system.slice/docker.service
           └─7542 /usr/bin/docker daemon -H fd://

nov 06 08:41:47 kramer65-VirtualBox systemd[1]: Starting Docker Application Container Engine...
nov 06 08:41:47 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:47.900410966+01:00" level=info msg="API ...ock"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.033514149+01:00" level=info msg="Fire...lse"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.141594321+01:00" level=info msg="Defa...ess"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.416294436+01:00" level=warning msg="Y...it."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.565507576+01:00" level=info msg="Load...rt."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567907022+01:00" level=info msg="Load...ne."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567945214+01:00" level=info msg="Daem...ion"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567969891+01:00" level=info msg="Dock....9.0
nov 06 08:41:48 kramer65-VirtualBox systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

This suggests that the Docker daemon is actually already running, but to be sure I just started the Docker daemon manually:

$ sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock           
INFO[0000] [graphdriver] using prior storage driver "aufs" 
INFO[0000] Firewalld running: false                     
INFO[0000] Default bridge (docker0) is assigned with an IP address XXX.XX.X.X/XX. Daemon option --bip can be used to set a preferred IP address 
WARN[0000] Your kernel does not support swap memory limit. 
INFO[0000] Loading containers: start.                   

INFO[0000] Loading containers: done.                    
INFO[0000] Daemon has completed initialization          
INFO[0000] Docker daemon                                 commit=76d6bc9 execdriver=native-0.2 graphdriver=aufs version=1.9.0

I then tried running the image again, but with the same result:

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

I tried sudo'ing the command, but to no avail. What am I doing wrong here?

8
  • 1
    same problem. I'm on Ubuntu 15.10 too :( Commented Nov 6, 2015 at 18:06
  • 1
    same problem, ubuntu 15.10 Commented Nov 16, 2015 at 22:30
  • 2
    Just restart your docker service that's all. Thanks @jim <pre>sudo service docker restart</pre>
    – Nasruddin
    Commented Dec 2, 2015 at 10:40
  • 1
    Nasruddin, that sure did NOT work for me... :-( Commented Jul 2, 2016 at 16:44
  • 1
    I had to restart the machine to make it work.
    – romaroma
    Commented Aug 11, 2016 at 9:50

26 Answers 26

462

You need to add your current user to the docker group as follows:

sudo usermod -aG docker $(whoami)

then logout & login again into the system or restart the system. test by docker version

for further info how to install docker-engine follow docker documentation

10
  • 1
    silly but it worked for me too @RobinLoxley, this should be an actual answer not just a comment, let me know if you post it, i'll give you an upvote ;)
    – benka
    Commented Feb 5, 2016 at 15:00
  • 10
    I would underline "logout & login again into the system or restart the system"
    – Michele
    Commented Mar 5, 2016 at 13:23
  • 3
    @Junaid answer below shows how to avoid the logout/login step, in case you are, like me, so lazy you don't want to restart your apps ;)
    – brandizzi
    Commented Apr 11, 2016 at 19:00
  • 1
    This is exactly what's mentioned in the Docker tutorial, but logging out and back in again didn't work for me. I had to restart the system to get it working.
    – aalaap
    Commented Jun 2, 2016 at 9:23
  • 4
    I see docker version information, but in the end of output, i see Cannot connect to the Docker daemon. Is the docker daemon running on this host?
    – ghanbari
    Commented Jul 3, 2016 at 16:54
140

Add the user to the docker group

  • Add the docker group if it doesn't already exist:

    sudo groupadd docker

  • Add the connected user "${USER}" to the docker group:

    sudo gpasswd -a ${USER} docker

  • Restart the Docker daemon:

    sudo service docker restart

  • Either do a newgrp docker or log out/in to activate the changes to groups.

3
  • 1
    It seems that newgrp docker is local to the shell, not the login session. This is not at all clear from the man page.
    – bergey
    Commented May 7, 2016 at 13:17
  • The only answer that worked! On a private cloud Linux machine, and it still worked! Commented Sep 29, 2017 at 20:48
  • Worked on Ubuntu 18.04! Thanks Commented Jun 5, 2019 at 9:48
38

Usually, the following command does the trick:

sudo service docker restart

This, instead of docker start for the cases where Docker seems to already be running.

If that works then, as suggested and in another answer and on this GitHub issue, if you haven't added yourself in the docker group do it by running:

sudo usermod -aG docker <your-username> 

And you're most likely good to go.


As for anybody else bumping into this, in some OS's docker doesn't start right after you install it and, as a result, the same can't connect to daemon message appears. In this case you can first verify that Docker is indeed not running by checking the status of your docker service by executing:

sudo service docker status

If the output looks something like: docker stop/waiting instead of docker start/running, process 15378 then it obviously means Docker is not active. In this case make sure you start it with:

sudo service docker start

And, as before, you'll most likely be good to go.

1
  • /var/run# service docker status [FAIL] Docker is not running ... failed! Commented Jul 11, 2021 at 15:00
18

note to self: I get the error from the question's title when I forget to run docker command with sudo:

sudo docker run ...

[Ubuntu 15.10]

13

After installing docker on Ubuntu, I ran the following command:

sudo service docker start

Have you tried it?

13

Had the same issue and what worked for me was:
Checking the ownership of /var/run/docker.sock

ls -l /var/run/docker.sock

If you're not the owner then change ownership with the command

sudo chown *your-username* /var/run/docker.sock

Then you can go ahead and try executing the docker commands hassle-free :D

2
  • 2
    After exhausting all the other possibilities, this is what got it to work on Sabayon/Gentoo Linux for me. Commented Apr 20, 2017 at 16:06
  • That file is owned by root but in docker group. The correct approach is to assign your current user to the docker group, according to Docker's documentation: sudo groupadd docker && sudo usermod -aG docker $USER Commented Jun 15, 2019 at 13:47
10

After install everything and start the service, try close your terminal and open it again, then try pull your image

Edit

I also had this issue again, if the solution above won't worked, try this solution that is the command bellow

sudo mv /var/lib/docker/network/files/ /tmp/dn-bak

Considerations

If command above works you probably are with network docker problems, anyway this resolves it, to confirm that, see the log with the command bellow

tail -5f /var/log/upstart/docker.log

If the output have something like that

FATA[0000] Error starting daemon: Error initializing network controller: could not delete the default bridge network: network bridge has active endpoints 
/var/run/docker.sock is up

You really are with network problems, however I do not know yet if the next time you restart(update, 2 months no issue again) your OS will get this problem again and if it is a bug or installation problem

My docker version

Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64
0
8

I had the same problem. Been struggling for two days to solve it.

It only worked when I did:

  1. According to Docker's Tutorial, you need to add the Docker key if not already added using:

    $ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add -

  2. Then make sure you grant docker privileges to yourself using:

    $ sudo usermod -aG docker $USER

Hope this helps you too.

1
  • 2
    Step 2 can be simplified as: sudo usermod -aG docker $USER Commented Mar 3, 2016 at 16:36
6

enter as root (sudo su) and try this:

unset DOCKER_HOST
docker run --name mynginx1 -P -d nginx

I've the same problem here, and the docker command only worked running as root, and also with this DOCKER_HOST empty

PS: also beware that the correct and official way to install on Ubuntu is to use their apt repositories (even on 15.10), not with that "wget" thing.

2
  • that "wget" thing just put the docker repository in your apt source....i.e. the same thing you are asked to manually do in the "correct and official way"....
    – Alar
    Commented Dec 21, 2015 at 8:56
  • 1
    I'm afraid you are wrong, Alar. The "wget" method will add docker repository in your apt source, which is good, but it will also do many other bad things like set a DOCKER_HOST env var, which will prevent docker to run out-of-the-box. Is not because both methods add docker to the repo that they are both the same. Commented Dec 28, 2015 at 23:46
5

For OSX:

After opening docker and starting the 'default' machine via the Quickstart Terminal (https://docs.docker.com/engine/installation/mac/), you try docker commands and get this "can't connect to docker daemon" message, it turns out you need some env variables set:

eval "$(docker-machine env default)"

Then try it out with docker run hello-world to see if everything is peachy.

5

For the ones who already tried restarting your machine, unsetting the environment variable DOCKER_HOST as told in the docker env documentation and all the rest just try to go with the

sudo service docker restart

Only this did the trick for me even after restarting the machine.

1
  • 2
    This is required if you only logout and login. Commented Jul 15, 2016 at 9:04
5

Giving non-root access - from docker

Add the docker group if it doesn't already exist.

$ sudo groupadd docker

Add the connected user "${USER}" to the docker group.

Change the user name to match your preferred user.

You may have to logout and log back in again for this to take effect.

$ sudo gpasswd -a ${USER} docker

Restart the Docker daemon.

$ sudo service docker restart
3

This question is currently number 3 on a Google search. After doing some research into solving this problem on my Linux system I thought I would write this answer. The original post states the problem is on Ubuntu but I also experienced the issue using Fedora. With that in mind, here is what I did to fix the problem.

On Fedora 22

Installing Docker:

$> curl -fsSL https://get.docker.com/ | sh

After installing Docker:

A user needs to be added to the docker group.

$> sudo usermod -aG docker

The docker daemon needs to be started

$> sudo service docker start

You can set the daemon to start at boot

$> sudo chkconfig docker on

You can verify the docker service is running

$> service docker status

And one last final check

$> docker run hello-world
2
  • On Fedora 23, this group may be called dockerroot. Also, you probably want to install it from the repository (instead of curl ... | sh) so it can be updated later: dnf install docker
    – basic6
    Commented Apr 28, 2016 at 12:14
  • many do not have a group "docker", so we have to add it first groupadd docker and then add it to your username sudo usermod -aG docker your_username
    – TonyTony
    Commented Jun 1, 2016 at 3:13
3

Tested in Ubuntu 16.04

# Create the docker group and add your user to the docker group
groupadd docker
usermod -aG docker $USER
newgrp docker

# Configure docker service to be exposed
mkdir -p /etc/systemd/system/docker.service.d
echo -e '[Service]\nExecStart=\nExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376' >> /etc/systemd/system/docker.service.d/override.conf

# restart service
systemctl daemon-reload
service docker restart
3

For me, none of the above fixes worked; i.e. my user was in the docker group, the service was running, etc. In the end I had a borked configuration it seems:

rm -rf ~/.docker

After that everything worked!

2

Try to use "sudo" with the command you are running.

1
  • "I tried sudo'ing the command, but to no avail. Does anybody know what I'm doing wrong here? All tips are welcome!"
    – RhinoDevel
    Commented Apr 2, 2016 at 20:07
2

I have same issue while running docker.

you can run commands as sudo user:

sudo docker ***your command here***
2

For Ubuntu:
Happened with me when I updated docker.
You need to unmask the service and socket and then restart the service.

Following worked for me:

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

What happend behind the scenes
systemd also has the ability to mark a unit as completely unstartable, automatically or manually, by linking it to /dev/null. This is called masking the unit, and is possible with the mask command.

sudo systemctl mask docker.service

You can check the list of masked services using:

sudo systemctl list-unit-files

Output of sudo systemctl list-unit-files

To enable auto/manual start of service you need to unmask it using:

sudo sytemctl unmask docker.service

Now the service will be enabled as shown below enter image description here

1

As docker binds to a unix socket which is owned by root while starting up, using 'sudo' along with the docker commands will work.

1
  1. I also had the same issue. The problem was in sockets allocated to docker-daemon and docker-client.
  2. First, permission was not set for the docker-client on docker.sock You can set it using "sudo usermod -aG docker $USER"
  3. Then check your bash file where the docker-client is running, For me it was on 0.0.0.0:2375, while docker-daemon was running on unix socket.(It was set in the configuration file of dockerd).
  4. Just comment the bash-line and it'll work fine.
  5. But if you want to make it work on TCP port instead of unix socket, change the configuration file of dockerd and set it on 0.0.0.0.2375 and keep the line in bash as it is if present or set it to 0.0.0.0:2375.
1

Perhaps this will help someone, as the error message is extremely unhelpful, and I had gone through all of the standard permission steps numerous times to no avail.

Docker occasionally leaves ghost environment variables in place that block access, despite your system otherwise being correctly set up. The following shell commands may make it accessible again, if you have had it running at one point and it just stopped cooperating after a reboot:

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

I had a previously working docker install, and after rebooting my laptop it simply refused to work. Was correctly added to the docker user group, had the correct permissions on the socket, etc, but could still not run docker login, docker run ..., etc. This fixed it for me. Unfortunately I have to run this on each reboot. This is mentioned on a couple of github issues also as a workaround, although it seems like a bug that this is a persistent barrier to correct operation of Docker (note: I am on Arch Linux, not OSX, but this was the same issue for me).

1

I was able to fix that by running the following command:

sudo mv /var/lib/dpkg/info/docker-ce* /tmp
1

In my case, docker was installed via snap. Needed to run sudo snap start docker to get it back up!

0

I have faced same error on Amazon EC2 instance. The issue got fixed after restarting the instance.

0

Add current user to docker group:

sudo usermod -aG docker $(whoami)

1
  • Please format this as code! And explain this command. And use the long (starting with --) versions of options.
    – buhtz
    Commented Aug 31, 2016 at 11:18
0

For Ubuntu 16.04

Inside file /lib/systemd/system/docker.service change:

ExecStart=/usr/bin/dockerd fd://

with:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375

Inside file /etc/init.d/docker change:

DOCKER_OPTS=

with:

DOCKER_OPTS="-H tcp://0.0.0.0:2375"

and then restart your computer.

Not the answer you're looking for? Browse other questions tagged or ask your own question.