Команде Docker не удается подключиться к демону Docker

215

Я хочу сделать переход к Docker, так что я только начал с ним обходиться. Я установил Docker на установку VirtualBox Ubuntu 15.10 (Wily Werewolf) и предложил здесь Затем я попытался запустить базовый nginx Изображение докеры:

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

Итак, я проверил, работает ли Docker:

$ 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.

Это говорит о том, что демон Docker на самом деле уже запущен, но я уверен, что я только что начал демон Docker вручную:

$ 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

Затем я попытался запустить изображение снова, но с тем же результатом:

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

Я попытался выполнить команду, но безуспешно. Что я здесь делаю неправильно?

  • 1
    та же проблема. Я тоже на Ubuntu 15.10 :(
  • 1
    та же проблема, убунту 15.10
Показать ещё 6 комментариев
Теги:
docker
daemon

21 ответ

437
Лучший ответ

Вам нужно добавить своего текущего пользователя [предположим, что вы вошли в систему как ubuntu] в группу докеров, как следует

sudo usermod -aG docker $(whoami)

затем выйти из системы и снова войти в систему в систему или перезапустить систему. тест docker version

для получения дополнительной информации о том, как установить docker-engine, следуйте документации докеров

  • 20
    Я перезапустил свою ВМ, и тогда это работает.
  • 0
    глупо, но это сработало и для меня @RobinLoxley, это должен быть реальный ответ, а не просто комментарий, дайте мне знать, если вы опубликуете его, я дам вам отзыв;)
Показать ещё 9 комментариев
125

Добавьте пользователя в группу докеров

  • Добавьте группу докеров, если она еще не существует:

    sudo groupadd docker

  • Добавьте подключенного пользователя "$ {USER}" в группу докеров:

    sudo gpasswd -a ${USER} docker

  • Перезапустите демон Docker:

    sudo service docker restart

  • Либо выполните newgrp docker, либо выполните вход/выход, чтобы активировать изменения группы.

  • 2
    у меня работает (Ubuntu 15.10)! отлично спасибо!
  • 1
    Кажется, что newgrp docker является локальным для оболочки, а не для сеанса входа в систему. Это не совсем понятно из справочной страницы.
Показать ещё 4 комментария
31

Обычно следующая команда выполняет трюк:

sudo service docker restart

Это вместо docker start для случаев, когда Docker уже работает.

Если это работает тогда, как было предложено и в другом ответе, и в этой проблеме GitHub, если вы не добавили себя в группу докеров, выполните ее, выполнив:

sudo usermod -aG docker <your-username> 

И вы, скорее всего, захотите пойти.


Как и в случае с кем-либо другим, в некоторых докере OS не запускается сразу после его установки, и в результате появляется тот же самый can't connect to daemon message. В этом случае вы можете сначала проверить, что Docker действительно не работает, проверяя статус вашей докерной службы, выполнив:

sudo service docker status

Если результат выглядит примерно так: docker stop/waiting вместо docker start/running, process 15378, то это означает, что Docker неактивен. В этом случае убедитесь, что вы запустите его с помощью:

sudo service docker start

И, как и прежде, вам, скорее всего, будет хорошо идти.

18

note to self: я получаю сообщение об ошибке из названия вопроса, когда забываю запустить команду docker с sudo:

sudo docker run ...

[Ubuntu 15.10]

9

После установки всего и запустите службу, попробуйте закрыть терминал и снова откройте его, затем попробуйте потянуть изображение

Изменить

У меня также была проблема с , если вышеприведенное решение не сработает, попробуйте это решение, приведенное ниже.

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

Вопросы

Если команда выше работает, вы, вероятно, сталкиваетесь с проблемами сетевой докеры, в любом случае это разрешает ее, чтобы подтвердить это, см. журнал с приведенной ниже командой

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

Если вывод имеет что-то вроде этого

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

У вас действительно проблемы с сетью, однако я еще не знаю, если в следующий раз, когда вы перезапустите ( обновить, еще 2 месяца больше не проблема), ваша ОС получит это проблема снова, и если это ошибка или проблема установки

Моя версия докеров

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
    Ваше решение отлично сработало для меня, спасибо +1
8

Если бы та же проблема и что сработало для меня:
Проверка права собственности на /var/run/docker.sock

ls -l /var/run/docker.sock

Если вы не являетесь владельцем, измените право собственности на команду

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

Затем вы можете продолжить выполнение команд docker без проблем: D

  • 1
    спасибо, у меня работает
  • 1
    После того, как я исчерпал все остальные возможности, он стал работать для меня на Sabayon / Gentoo Linux.
8

После установки docker на Ubuntu я выполнил следующую команду:

sudo service docker start

Вы пробовали?

6

У меня была та же проблема. Борьба в течение двух дней, чтобы решить эту проблему.

Он работал только тогда, когда я это делал:

  • Согласно Docker Tutorial, вам нужно добавить ключ Docker, если он еще не добавлен, используя:

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

  • Затем убедитесь, что вы предоставили привилегии докеров себе, используя:

    $ sudo usermod -aG docker $USER

Надеюсь, это тоже поможет.

  • 2
    Шаг 2 можно упростить как: sudo usermod -aG docker $USER
5

Для OSX:

После открытия докера и запуска машины "по умолчанию" через терминал быстрого запуска (https://docs.docker.com/engine/installation/mac/) вы пытаетесь выполнить команды докеров и получить это" не может подключиться к сообщению docker daemon, , вам нужно установить некоторые переменные env:

eval "$(docker-machine env default)"

Затем попробуйте docker run hello-world, чтобы увидеть, все ли персик.

4

введите как root (sudo su) и попробуйте следующее:

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

У меня такая же проблема, и команда docker работает только с правами root, а также с этим DOCKER_HOST empty

PS: также будьте осторожны, что правильный и официальный способ установки на Ubuntu - использовать свои apt-репозитории (даже на 15.10), не с, что " wget" вещь.

  • 0
    эта вещь "wget" просто помещает хранилище docker в ваш apt-источник .... т.е. то же самое, что вас просят сделать вручную "правильным и официальным способом" ....
  • 1
    Боюсь, ты не прав, Алар. Метод "wget" добавит в ваш исходный код apt репозиторий docker, что хорошо, но он также сделает много других плохих вещей, например, установит переменную DOCKER_HOST env, которая предотвратит запуск docker из коробки. Не потому, что оба метода добавляют docker к репо, они оба одинаковы.
3

Предоставление доступа без полномочий root - от docker

Добавьте группу докеров, если она еще не существует.

$ sudo groupadd docker

Добавьте подключенного пользователя "$ {USER}" в группу докеров.

Измените имя пользователя в соответствии с вашим предпочтительным пользователем.

Вам может потребоваться выйти и снова войти в систему для это вступит в силу.

$ sudo gpasswd -a ${USER} docker

Перезапустите демон Docker.

$ sudo service docker restart
3

Для тех, кто уже попробовал перезагрузить ваш компьютер, отключив переменную окружения DOCKER_HOST, как указано в документации docker env, и все остальное просто попробуйте пойти с

sudo service docker restart

Только это помогло мне даже после перезагрузки машины.

  • 2
    Это необходимо, если вы только выходите из системы и входите в систему.
  • 0
    @ZhangLongQI хорошо, спасибо
3

Этот вопрос в настоящее время номер 3 в поиске Google. Проведя некоторые исследования по решению этой проблемы в моей системе Linux, я подумал, что напишу этот ответ. В исходном сообщении говорится, что проблема связана с Ubuntu, но я также столкнулся с проблемой использования Fedora. Имея это в виду, вот что я сделал, чтобы решить проблему.

В Fedora 22

Установка докера:

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

После установки Docker:

Пользователь должен быть добавлен в группу докеров.

$> sudo usermod -aG docker

Необходимо запустить демон docker

$> sudo service docker start

Вы можете установить запуск демона при загрузке

$> sudo chkconfig docker on

Вы можете проверить, работает ли служба докеров

$> service docker status

И последняя окончательная проверка

$> docker run hello-world
  • 0
    На Fedora 23 эту группу можно назвать dockerroot . Кроме того, вы, вероятно, хотите установить его из репозитория (вместо curl ... | sh ), чтобы его можно было обновить позже: dnf install docker
  • 0
    у многих нет группового «докера», поэтому мы должны сначала добавить его в groupadd docker а затем добавить его к вашему имени пользователя sudo usermod -aG docker your_username
2

Для Ubuntu:
Случилось со мной, когда я обновил докер.
Вам нужно разобрать службу и сокет, а затем перезапустить службу.

После меня работали:

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

Что происходит за кулисами
systemd также имеет возможность пометить блок как полностью нестандартный, автоматически или вручную, связав его с /dev/null. Это называется маскировкой блока и возможно с помощью команды mask.

sudo systemctl mask docker.service

Вы можете проверить список маскированных служб, используя:

sudo systemctl list-unit-files

Изображение 3920

Чтобы включить автоматический/ручной запуск службы, вам необходимо разобрать его, используя:

sudo sytemctl unmask docker.service

Теперь служба будет включена, как показано ниже Изображение 3921

2

У меня такая же проблема во время работы docker.

вы можете запускать команды как sudo:

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

Попробуйте использовать "sudo" с помощью команды, которую вы используете.

  • 0
    «Я пытался выполнить команду, но безрезультатно. Кто-нибудь знает, что я здесь делаю не так? Все советы приветствуются!»
1
  • У меня тоже была такая же проблема. Проблема была в сокетах, выделенных для docker-daemon и docker-client.
  • Сначала разрешение для docker-client на docker.sock не было установлено. Вы можете установить его с помощью "sudo usermod -aG docker $USER"
  • Затем проверьте файл bash, в котором работает docker-client, для меня это было на 0.0.0.0:2375, тогда как docker-daemon запускался в unix-сокете (он был установлен в файле конфигурации dockerd).
  • Просто прокомментируйте строку bash, и она будет работать нормально.
  • Но если вы хотите, чтобы он работал на TCP-порт вместо unix-сокета, измените файл конфигурации dockerd и установите его на 0.0.0.0.2375 и сохраните строку в bash, как она есть, если она присутствует или установлена до 0.0.0.0:2375.
1

Поскольку докер связывается с unix-сокетом, который принадлежит root при запуске, использование sudo вместе с командами docker будет работать.

0

Для Ubuntu 16.04

Внутри файла /lib/systemd/system/docker.service изменить:

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

с:

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

Внутри файла /etc/init.d/docker изменить:

DOCKER_OPTS=

с:

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

а затем перезагрузите компьютер.

0

Добавить текущего пользователя в группу докеров:

sudo usermod -aG docker $(whoami)

  • 0
    Пожалуйста, отформатируйте это как код! И объясни эту команду. И используйте длинные (начиная с -- ) варианты опций.
0

Я столкнулся с такой же ошибкой в ​​экземпляре Amazon EC2. Проблема была исправлена ​​после перезапуска экземпляра.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню