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


246

Я хочу зробити переїзд до Докера, тому я тільки почав з цим возитися. Я встановив Docker на встановленні VirtualBox Ubuntu 15.10 (Wily Werewolf) і, як тут пропонується, я спробував запустити базове зображення Docker nginx :

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

Тож я перевірив, чи працює Докер:

$ 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
та ж проблема, ubuntu 15.10
Лукас Теттаманті

1
Просто перезапустіть свою докерну послугу, і це все. Спасибі @jim <pre> sudo service docker restart restart </pre>
Насруддін

1
Насруддін, що точно не працював для мене ... :-(
Rafael_Espericueta

1
Мені довелося перезапустити машину, щоб вона працювала.
ромарома

Відповіді:


443

Вам потрібно додати свого поточного користувача до групи докерів таким чином:

sudo usermod -aG docker $(whoami)

потім вийдіть із системи та увійдіть знову в систему або перезавантажте систему. тест поdocker version

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


нерозумно , але це працює для мене занадто @RobinLoxley, це повинно бути фактична відповідь не просто коментар, дайте мені знати , якщо ви розмістите його, я дам вам upvote;)
Бенка

9
Я б підкреслив "вихід і вхід знову в систему або перезапуск системи"
Michele

3
@Junaid відповідь нижче показує, як уникнути кроку виходу / входу, якщо ви такі, як я, такі ліниві, що не хочете перезавантажувати програми;)
brandizzi

Це саме те, про що йдеться у підручнику Докера, але вихід із системи та повторення роботи для мене не працювали. Мені довелося перезапустити систему, щоб вона працювала.
аалаап

4
Я бачу інформацію про версію Cannot connect to the Docker daemon. Is the docker daemon running on this host?
докера

137

Додайте користувача до групи докерів

  • Додайте групу докерів, якщо вона ще не існує:

    sudo groupadd docker

  • Додайте підключеного користувача "$ {USER}" до групи докерів:

    sudo gpasswd -a ${USER} docker

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

    sudo service docker restart

  • Або newgrp dockerактивуйте або вийдіть / увійдіть, щоб активувати зміни в групах.


1
Здається, newgrp dockerце локальне для оболонки, а не сеанс входу. Це зовсім не зрозуміло зі сторінки man.
Бергей

1
Працювали для мене. Дякую!
Апокай

Єдина відповідь, що спрацювала! На приватній хмарній машині Linux, і вона все ще працювала!
Meghna Natraj

Працював над Ubuntu 18.04! Спасибі
Kshitij Saraogi

33

Зазвичай наступна команда виконує трюк:

sudo service docker restart

Це замість docker startвипадків, коли Докер, здається, вже працює.

Якщо це працює, як це запропоновано, і в іншій відповіді та в цьому питанні GitHub , якщо ви ще не додали себе до групи докерів, зробіть це, запустивши:

sudo usermod -aG docker <your-username> 

І вам, швидше за все, добре піти.


Що стосується інших, хто натрапляє на це, у деяких докерів ОС не запускається відразу після його встановлення, і, як результат, can't connect to daemon messageз'являється те саме . У цьому випадку ви можете спочатку переконатися, що Docker дійсно не працює, перевіривши стан вашої докерської служби, виконавши:

sudo service docker status

Якщо вихід виглядає приблизно так: docker stop/waitingзамість docker start/running, process 15378цього, очевидно, це означає, що Докер не активний. У цьому випадку переконайтеся, що ви починаєте з:

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

Тоді ви можете піти вперед і спробувати виконати команди докера без проблем: 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

Після установки докера в Ubuntu я запустив таку команду:

sudo service docker start

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


6

У мене була така ж проблема. Два дні боролися, щоб вирішити це.

Це спрацювало лише тоді, коли я зробив:

  1. Відповідно до Підручника Докера , вам потрібно додати ключ 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" річ просто помістіть сховище докера у ваш підходящий джерело .... тобто те саме, що вас просять вручну зробити "правильним і офіційним способом" ....
Alar

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

5

Для OSX :

Після відкриття докера та запуску машини "за замовчуванням" через термінал Quickstart ( https://docs.docker.com/engine/installation/mac/ ), ви спробуєте докерські команди і отримаєте це повідомлення "Не можу підключитися до демон-докера". , виявляється, вам потрібні набір змінних env :

eval "$(docker-machine env default)"

Потім спробуйте це, docker run hello-worldщоб побачити, чи все персикове.


5

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

sudo service docker restart

Тільки це зробило для мене хитрість навіть після перезавантаження машини.


2
Це потрібно, якщо ви лише виходили з системи та входили в систему.
Чжан ЛонгQI

4

Надання некореневого доступу - від докера

Додайте групу докерів, якщо вона ще не існує.

$ sudo groupadd docker

Додайте підключеного користувача "$ {USER}" до групи докерів.

Змініть ім’я користувача, щоб відповідати бажаному користувачеві.

Можливо, вам доведеться вийти з системи та знову ввійти знову, щоб це вступило в силу.

$ sudo gpasswd -a ${USER} docker

Перезапустіть демон Докера.

$ sudo service docker restart

3

Наразі це запитання є номером 3 у пошуку Google. Провівши кілька досліджень щодо вирішення цієї проблеми в моїй системі Linux, я подумав, що напишу цю відповідь. У початковій публікації зазначено, що проблема пов’язана з Ubuntu, але я також випробував проблему за допомогою Fedora. Зважаючи на це, ось що я зробив, щоб вирішити проблему.

На Fedora 22

Встановлення Docker:

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

Після встановлення Docker:

Користувача потрібно додати в групу докерів.

$> sudo usermod -aG docker

Демон докера потрібно запустити

$> sudo service docker start

Ви можете встановити демон, щоб він починався під час завантаження

$> sudo chkconfig docker on

Ви можете перевірити, чи працює служба докера

$> 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" з командою, яку ви виконуєте.


"Я спробував намовити команду, але безрезультатно. Хтось знає, що я тут роблю неправильно? Усі поради вітаються!"
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. Це називається маскуванням блоку, і це можливо за допомогою команди маски.

sudo systemctl mask docker.service

Ви можете перевірити список маскованих служб за допомогою:

sudo systemctl list-unit-files

Виведення файлів списку-unit-файлів sudo systemctl

Щоб увімкнути автоматичний / ручний запуск послуги, потрібно зняти її за допомогою:

sudo sytemctl unmask docker.service

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


1

Оскільки докер прив'язується до unix-сокета, який належить root під час запуску, використання 'sudo' разом з командами docker буде працювати.


1
  1. У мене теж було таке ж питання. Проблема полягала в розетках, виділених докер-демону та докер-клієнту.
  2. По-перше, для docker-клієнта на docker.sock не встановлено дозвіл. Ви можете встановити його за допомогою "sudo usermod -aG docker $ USER"
  3. Потім перевірте свій bash-файл, де працює докер-клієнт. Для мене це було на 0.0.0.0:2375, поки docker-daemon працював на unix socket. Він був встановлений у файлі конфігурації dockerd.
  4. Просто прокоментуйте bash-лінію, і вона буде добре працювати.
  5. Але якщо ви хочете змусити його працювати на порту TCP замість unix socket, змініть файл конфігурації 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

Додати поточного користувача в групу докер:

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.