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


246

Я хочу перейти на Docker, поэтому я только начал возиться с этим. Я установил Docker на установку VirtualBox Ubuntu 15.10 (Wily Werewolf) и, как это было предложено здесь, я попытался запустить базовый образ Dogin 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
Лукас Теттаманти

1
Просто перезапустите ваш докер-сервис, вот и все. Спасибо @jim <pre> Перезапуск докера службы sudo </ pre>
Насреддин

1
Насреддин, это точно не сработало для меня ... :-(
Rafael_Espericueta

1
Мне пришлось перезагрузить машину, чтобы она заработала.
Ромарома

Ответы:


443

Вам необходимо добавить вашего текущего пользователя в группу Docker следующим образом:

sudo usermod -aG docker $(whoami)

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

Для получения дополнительной информации о том, как установить Docker-Engine, следуйте документации Docker.


глупо, но это сработало и для меня @RobinLoxley, это должен быть фактический ответ, а не просто комментарий, дайте мне знать, если вы разместите его, я дам вам голос;)
benka

9
Я хотел бы подчеркнуть «Выйти и снова войти в систему или перезапустить систему»
Мишель

3
Ответ @Junaid ниже показывает, как избежать шага выхода из системы / входа в систему, если вы, как и я, настолько ленивы, что не хотите перезапускать свои приложения;)
brandizzi

Это именно то, что упомянуто в учебнике по Docker, но выход из системы и повторный вход не работают для меня. Мне пришлось перезагрузить систему, чтобы она заработала.
aalaap

4
Я вижу информацию о версии докера, но в конце вывода я вижуCannot connect to the Docker daemon. Is the docker daemon running on this host?
ghanbari

137

Добавить пользователя в группу Docker

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

    sudo groupadd docker

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

    sudo gpasswd -a ${USER} docker

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

    sudo service docker restart

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


1
Кажется, newgrp dockerэто локально для оболочки, а не сеанс входа в систему. Это не совсем понятно из справочной страницы.
bergey

1
Работал на меня. Спасибо!
Апокай

Единственный ответ, который сработал! На частной облачной машине Linux, и это все еще работает!
Мегна

Работал на Ubuntu 18.04! Спасибо
Kshitij Сараоги

33

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

sudo service docker restart

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

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

sudo usermod -aG docker <your-username> 

И вы, скорее всего, хорошо идти.


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

sudo service docker status

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

sudo service docker start

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


18

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

sudo docker run ...

[Ubuntu 15.10]


12

У меня была та же проблема, и у меня сработало следующее:
Проверка владения /var/run/docker.sock

ls -l /var/run/docker.sock

Если вы не владелец, измените владельца с помощью команды

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

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


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

Этот файл принадлежит, rootно в dockerгруппе. Правильный подход состоит в том, чтобы назначить вашего текущего пользователя в dockerгруппу, согласно документации sudo groupadd docker && sudo usermod -aG docker $USER
Лукас Бустаманте

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

8

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

sudo service docker start

Ты это пробовал?


6

У меня такая же проблема. Два дня боролись за ее решение.

Это сработало только тогда, когда я сделал:

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

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

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

    $ sudo usermod -aG docker $USER

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


2
Шаг 2 может быть упрощен как:sudo usermod -aG docker $USER
johntellsall

5

введите как root ( sudo su) и попробуйте это:

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

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

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


эта вещь "wget" просто помещает репозиторий docker в ваш источник apt .... т.е. то же самое, что вас просят сделать вручную "правильным и официальным способом" ....
Алар

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

5

Для OSX :

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

eval "$(docker-machine env default)"

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


5

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

sudo service docker restart

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


2
Это необходимо, если вы только выходите из системы и авторизуетесь.
Чжан ЛонгQI

4

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

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

$ sudo groupadd docker

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

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

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

$ sudo gpasswd -a ${USER} docker

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

$ sudo service docker restart

3

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

На Fedora 22

Установка Docker:

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

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

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

$> sudo usermod -aG docker

Должен быть запущен демон Docker

$> sudo service docker start

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

$> sudo chkconfig docker on

Вы можете убедиться, что служба Docker запущена

$> service docker status

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

$> docker run hello-world

На Fedora 23 эту группу можно назвать dockerroot. Кроме того, вы, вероятно, хотите установить его из репозитория (вместо curl ... | sh), чтобы его можно было обновить позже:dnf install docker
basic6

у многих нет группового «докера», поэтому мы должны сначала добавить его, groupadd dockerа затем добавить его к вашему имени пользователяsudo usermod -aG docker your_username
TonyTony

2

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


«Я пытался sudo'ing команды, но безрезультатно. Кто-нибудь знает, что я делаю здесь не так? Все советы приветствуются!»
RhinoDevel

2

У меня та же проблема при запуске докера.

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

sudo docker ***your command here***

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

Вывод sudo systemctl list-unit-files

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

sudo sytemctl unmask docker.service

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


1

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


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

1

Возможно, это кому-нибудь поможет, так как сообщение об ошибке крайне бесполезно, и я неоднократно проходил все стандартные этапы разрешений, но безрезультатно.

Docker иногда оставляет переменные среды-призрака на месте, которые блокируют доступ, несмотря на то, что ваша система в противном случае настроена правильно. Следующие команды оболочки могут сделать его снова доступным, если он был запущен в какой-то момент и он просто перестал взаимодействовать после перезагрузки:

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

У меня была ранее установленная докерская установка, и после перезагрузки моего ноутбука он просто отказывался работать. Было добавлено к группе пользователей докера, имели необходимые разрешения на сокет, и т.д., но все еще не могли бежать docker login, docker run ...и т.д. Это установило ее для меня. К сожалению, я должен запускать это при каждой перезагрузке. Это упоминается в отношении нескольких проблем github также в качестве обходного пути, хотя кажется, что это постоянный барьер на пути корректной работы Docker (похоже, ошибка) (примечание: я работаю в Arch Linux, а не в OSX, но это было той же проблемой для меня).


1

Протестировано в 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

0

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


0

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

sudo usermod -aG docker $(whoami)


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

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"

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.