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


473

Після оновлення своєї версії Docker 0.8.0під час введення я отримую повідомлення про помилку sudo docker version:

Client version: 0.8.0
Go version (client): go1.2
Git commit (client): cc3a8c8
2014/02/19 12:54:16 Can't connect to docker daemon. Is 'docker -d' running on this host?

І я слідував інструкціям і ввів команду sudo docker -d, і отримав це:

[/var/lib/docker|2462000b] +job initserver()
[/var/lib/docker|2462000b.initserver()] Creating server
open /var/lib/docker/aufs/layers/cf2414da53f9bcfaa48bc3d58360d7f1cfd3784e4fe51fbef95197709dfc285d: no such file or directory[/var/lib/docker|2462000b] -job initserver() = ERR (1)
2014/02/19 12:55:57 initserver: open /var/lib/docker/aufs/layers/cf2414da53f9bcfaa48bc3d58360d7f1cfd3784e4fe51fbef95197709dfc285d: no such file or directory

Як вирішити проблему?


7
Ви використовували sudo під час запуску docker -d?
Бен Уейлі

Я помічаю, що в помилці сказано no such file or directory[/var/lib/docker|2462000b]. Чи /var/lib/dockerіснує у вашій системі? Якщо ні, то я думаю, що вам потрібно перевстановити Docker.
Бен Уейлі

3
У мене така ж проблема (не можу підключитися до демон, що показ "ps" все ще працює), за винятком того, що я не отримую жодного повідомлення "файл не знайдено" під час запуску демон. / var / lib / docker існує.
Джонатан Хартлі

Ви використовуєте докер на VPS?
порося

Встановіть звідси робочий стіл докера, це вирішить. docs.docker.com/docker-for-mac/install
Гай Ассаф

Відповіді:


642

Linux

Крок після встановлення документації для Linux виявляє такі кроки:

  1. Створіть групу докерів .
    Додо докер
  2. Додайте користувача до групи докерів .
    sudo usermod -aG docker $ (whoami)
  3. Вийдіть із системи та увійдіть знову, щоб забезпечити, щоб докер працював із правильними дозволами.
  4. Запустіть докер.
    Початок роботи докера служби судо

Mac OS X

Як каже Дейел Острако , необхідно додати змінні середовища:

docker-machine start # Start virtual machine for docker
docker-machine env  # It's helps to get environment variables
eval "$(docker-machine env default)" # Set environment variables

docker-machine startКоманда виводить коментарі для керівництва процесу.


Так. Це було для мене проблемою. Я додав свого користувача до групи докер, і тепер я можу підключитися до демона. Спасибі
Богдан

FWIW, посилання на розділ специфічного це
асиметрична

20
Якщо з якоїсь причини ви не хочете виходити з системи, ви можете скористатися newgrpкомандою для запуску нової оболонки в цій новій групі. Як це: newgrp docker.
Denilson Sá Maia

sudo chown $ USER: $ USER / шлях / до / докер / двійковий
Івор Скотт

У мене не було часу перезапустити баш. Так і alias docker='sudo docker'зробили трюк. : p
LovaBill

149

Linux

Щоб запустити демон докера в Linux (від CLI ), запустіть:

$ sudo service docker start # Ubuntu/Debian

Примітка. Пропустіть $символ при копіюванні та вставці.

У RedHat / CentOS, виконайте команду: sudo systemctl start docker.

Щоб ініціалізувати "базову" файлову систему, запустіть:

$ sudo service docker stop
$ sudo rm -rf /var/lib/docker
$ sudo service docker start

або вручну:

$ sudo docker -d --storage-opt dm.basesize=20G

Встановити docker-machineна Linux

Щоб встановити машинні бінарні файли в Linux:

  • локально:

    install -vm755 <(curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) $HOME/bin/docker-machine
    
  • глобальний:

    sudo bash -c 'install -vm755 <(curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine'
    

macOS

У macOS dockerбінарний файл є лише клієнтом, і ви не можете використовувати його для запуску демона docker, оскільки демон Docker використовує особливості ядра Linux, тому ви не можете запускати Docker в ОС Windows X. Тому вам доведеться встановитиdocker-machine , щоб створити ВМ і приєднати до нього.

Встановити docker-machineна macOS

Якщо ви ще не маєте docker-machineкоманди, встановіть її за допомогою одного з наступних методів:

  • Використовуючи Brew команду: brew install docker-machine docker.
  • вручну від GitHub :

    install -v <(curl https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine
    

Див. Початок роботи з Docker для Mac .

Налаштування docker-machineна macOS

Щоб запустити Docker Machine через Homebrew, запустіть:

brew services start docker-machine

Щоб створити defaultмашину (якщо у вас її немає, див. docker-machine ls:):

docker-machine create --driver virtualbox default

Потім налаштуйте середовище для клієнта Docker:

eval "$(docker-machine env default)"

Потім двічі перевірте, перерахувавши контейнери:

docker ps

Див. Початок роботи з Docker Machine та місцевим VM .


Встановіть Docker.app на macOS

Як альтернатива вищезазначеному рішенню, ви можете встановити додаток Docker:

brew cask install docker

Перегляньте цю публікацію для отримання більш детальної інформації . Дивіться також: Не вдається підключитися до демона Docker на macOS


1
sudo service docker починає роботу з Docker 1.9.1 на Ubuntu 14.04

Дякую. саме це працювало для мене на Ubuntu 14.04. все інше не вдалося.
nyxee

Це єдине, що працювало на Mac OSX із апаратним забезпеченням, старшим за 2010 рік. Мені довелося встановити docker-toolboxз docs.docker.com/toolbox/toolbox_install_mac
Vikram

2
Мені потрібно було встановити докер-композит, докер-автомат і докер через Homebrew, тоді це працювало чудово!
Ентальпі

У мене була ця проблема на CentOS 7.6 з докером 18, sudo rm -rf /var/lib/dockerа потім перезапуск зробив свою справу. Я справді застряг, і жодне інше рішення не працювало на мене.
Ашкан

142

Якщо ви працюєте з Docker на OS X, для мене працює наступний eval.

eval "$(docker-machine env default)"

Якщо ви не хочете запускати цю операцію eval на кожному термінальному сеансі, ви можете додати це до свого bash_profile:

#Docker
eval "$(docker-machine env default)"

Не забудьте перезапустити термінальний сеанс або запустити джерело, bash_profileщоб зміни набрали чинності.


3
Тут же, якщо я спробую це поодинці, я часто отримую Error checking TLS connection: Host is not running... запуск цього рівня після того, як команда docker-machine start defaultзробила трюк.
Еміліо Ферруччі

100

Після детального розслідування, здається, ця проблема виникає кожного разу після перезавантаження Mac OS X (або віртуальної машини Docker), що не дозволяє клієнту Docker підключитися до демона Docker.

Щоб вирішити проблему, ви можете:

A) Перевстановіть Docker Toolbox за допомогою офіційного інсталятора ( https://www.docker.com/products/docker-toolbox ) або просто

B) Виконайте такі команди в порядку:

# First make sure that the virtual machine is running
docker-machine start default

# Regenerate TLS connection certs, requires confirmation
docker-machine regenerate-certs default

# Finally, set env
eval "$(docker-machine env default)"

C) Те саме, що і (B), ви також можете скопіювати та вставити наступний рядок, щоб виконати всі три команди:

docker-machine start default; docker-machine regenerate-certs default; eval "$(docker-machine env default)"

Якщо ви отримаєте таку помилку:

Error getting SSH command: Something went wrong running an SSH command!
command : cat /etc/os-release
err     : exit status 255
output  :

просто повторіть три команди в інший раз, і це має спрацювати вдруге.


6
Я отримую Host не існує: "за замовчуванням"
Роман Гауфман

@RomanGaufman: це працює для вас: докер-машина запускається за замовчуванням?
КАД

1
@RomanGaufman Мені довелося перезапустити свій термінал перед успішним виконанням команди.
anon58192932

це тому, що ip віртуальної скриньки vm змінюється щоразу, коли ви перезавантажуєте комп'ютер?
Cui Pengfei 崔鹏飞

@ Помилка RomanGaufman є вирішується відповіддю ( в даний час) нижче: stackoverflow.com/a/34887761/634576
Дейв Schweisguth

47

Зазвичай це відбувається, коли ви не в dockerгрупі. Ви можете додати себе до dockerгрупи за допомогою:

sudo usermod -aG docker yourusername

або

sudo usermod -aG docker $(whoami)

Після цього потрібно вийти з системи та знову увійти на сервер.

Крім того, ви можете виконувати sudoкожну команду Docker.


5
а якщо групи немає: sudo groupadd docker
izy

30

Якщо всі інші рішення, наведені вище, не працюють, ви можете спробувати перевірити право власності на /var/run/docker.sock:

ls -l /var/run/docker.sock

Якщо ви не власник, то змініть право власності за допомогою команди:

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

Тоді ви можете піти вперед і спробувати виконати команди Docker без проблем: D


1
Я почав з цієї відповіді, і це мені допомогло!
Анджей Мартина

2
Проблема такого підходу полягає в тому, що вам доведеться повторювати цей крок щоразу, коли демон перезапускається
MFIhsan

Привіт @MFIhsan розумний SYS-адміністратор скаже вам , щоб просто створити Баш скрипт цих команд і & додати його в CRONTAB , щоб запустити його при перезавантаженні / запуску , як описано тут> stackoverflow.com/a/29247942/3469960
kevthanewversi

Звичайний користувач ніколи не повинен володіти носком! Якщо у вас немає шкарпетки, тоді переконайтеся, що ви в групі колеса, а група шкарпеток належить ... а не групі власників шкарпеток!
CrazyMerlin

16

Найкращим способом з’ясувати, чому Докер не працює, буде запустити демон вручну.

$ sudo service docker stop
$ ps aux | grep docker  # do this until you don't see /usr/bin/docker -d
$ /usr/bin/docker -d

Демон Docker входить до STDOUT, тому він почне виплювати все, що робить.

Ось, у чому полягає моя проблема:

[8bf47e42.initserver()] Creating pidfile
2015/01/11 15:20:33 pid file found, ensure docker is not running or delete /var/run/docker.pid

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

Звичайно, замість того, щоб сліпо припускати, що це спрацює, я б запропонував запустити демон ще раз вручну та переглянути аналіз журналу на наявність інших помилок перед запуском служби резервного копіювання.


1
Це теж допомогло мені знайти питання (я, на жаль, побачив вашу відповідь після цього). Моя була відсутнім apparmorпакетом.
П'єр де ЛЕСПІНАЙ

Це рішення спрацювало на мене. Після видалення /var/run/docker.pid я нарешті зміг запустити докер.
jirikadlec2

3
Попередження: '-d' застаріло, воно буде видалено незабаром. Див. Використання. УВАГА [0000] замість цього використовуйте "docker demon".
juanmf

3
прапор надано, але не визначено: -d
Луїс де Суса

Для запуску демон-докера вручну в останніх версіях з увімкненою налагодженням:dockerd -D
Луїс Мігель Серрано

14

Якщо ви отримаєте повідомлення Can't connect to docker daemon. Is 'docker -d' running on this host?, ви можете його перевірити docker version.

Якщо ви бачите інформацію, на зразок програми Docker Client. але Docker Server це не так, очевидно, вам потрібно запустити сервер Docker.

У CentOS ви можете serviceзапустити або зупинити сервер Docker.

$ sudo service docker stop
$ sudo service docker start

Потім, після введення docker version, ви отримаєте інформацію про Docker Client та Docker Server , і демон Docker був запущений.


2
sudo service docker startтакож працював для мене на Ubuntu 14.04.
funroll

Cent os 7, треба робити це кожного разу, коли я запускаю докер.
Падді

@Paddy Потрібно ввімкнути послугу після того, як її заявити, і вона запуститься, якщо система запущена і працюватиме у фоновому режимі.
CrazyMerlin

Усі ці відповіді, які говорять: "Вам потрібно запустити docker systemctl start docker", завжди припускайте, що для запуску є послуга докера. Якщо з установкою докера виникли якісь проблеми, файл конфігурації служби може навіть не існувати; тоді ви отримуєте: "Unit docker.service not загружений"
CrazyMerlin

12

Зробіть a, ps aux | grep dockerщоб побачити, чи працює демон. Якщо не бігти/etc/init.d/docker start


5
У мене така ж проблема. 'ps' показує, що мій докерський процес все ще працює.
Джонатан Хартлі

зупинившись і запустивши докер (який уже працював) випрямив мене.
Кайл

14
sudo service docker startкаже мені "старт / запуск sudo service docker status
докера

12

Я перезавантажую Docker після його встановлення:

$ sudo service docker stop
$ sudo service docker start

І це працює.


9

У мене є аналогічна проблема. Мені довелося вийти з системи та знову увійти до оболонки, тому що я щойно встановив Docker і наступна команда не відображалась у моєму середовищі.

export DOCKER_HOST=127.0.0.1:4243 >> ~/.bashrc

3
Мені просто потрібно було вийти та знову увійти. Все виправлено!
Марк Шуст у M.academy

Це вирішило мою проблему! Я запускаю Ubuntu 16.04 як WSL. Єдине, що мені довелося змінити - це номер порту за замовчуванням: export DOCKER_HOST = 127.0.0.1: 2375 >> ~ / .bashrc
Alex

9

Я зіткнувся з цією проблемою, і я перезапустив Docker за допомогою цих команд:

$ sudo service docker stop
$ sudo service docker start

Але я не вирішив свою проблему, тому що забув виконувати свої команди Докер без цього sudo. Для тих, хто стикається з цією проблемою, спробуйте це перевірити.

Спробуйте

$ sudo docker info

замість цього:

$ docker info

Це була саме моя проблема при спробі запуску docker buildна Ubuntu Xenial.
ашназг

9

Ви можете використовувати команду

sudo service docker stop && sudo service docker start

просто запустити його.


3
Або sudo service docker restartпростіше 😊
fr1sk

8

Я маю таку ж помилку і намагаюся docker-machine regenerate-certsчи eval..не працював для мене.

Це на OS X 10.11.3 (El Capitan) та Docker v1.10.1. Я зміг це виправити, лише знову видаливши та відтворивши докер-автомат.Джерело

Якщо працює docker-machine ls , він показує вам аналогічний висновок, наведений нижче;

DOCKER

Невідомо

ПОМИЛКИ

Неможливо запитувати версію докера: Не вдається підключитися до кінцевої точки двигуна докерного пристрою

Спробуйте видалити машину Docker за допомогою;

docker-machine rm -f default

Звідки defaultваше ім'я Docker. Тоді;

docker-machine create -d virtualbox default

Створює нову машину Docker.

Перевірте, чи зараз все виглядає нормально (немає помилок або невідомого Докера) за допомогою:

docker-machine ls

Нарешті, не забудьте запуститись "$(docker-machine env default)"перед тим, як продовжити або запустити термінал Docker Quickstart, який робить це за вас ...


6

У мене була така ж проблема - "Не вдається підключитися до демон-докера". (за винятком я не отримав жодних помилок "файл не знайдено" при спробі запуску сервера.)

'ps' показав, що "/ usr / bin / docker -d" все ще працює

Я зрозумів, що мені ніколи насправді не вдалося запустити сам сервер. Кожна спроба була породжена

...
2014/03/24 21:57:29 pid file found, ensure docker is not running or delete /var/run/docker.pid

Тож я запізніло зрозумів, що установка докера, можливо, зареєструвала демона на початку, і це почало для мене. Отже, спроба вбити демона для ручного перезавантаження це не вдається (операція не дозволена). Так я зробив

sudo kill -9 <PID>

про демоновий процес. Ще один демон негайно зайняв своє місце, і цей новий ДОДАЄ тепер мій клієнт CLI підключитися:

$ sudo docker info
Containers: 0
Images: 0
Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 0
WARNING: No memory limit support
WARNING: No swap limit support

6

Спробуйте додати поточного користувача до dockerгрупи:

sudo usermod -aG docker $USER

Потім вийдіть та увійдіть.


6

Використовуйте додаток Docker CE

macOS

Використовуйте нову програму Docker Community Edition для macOS. Наприклад:

  1. Видаліть усі пакунки Docker Homebrew, які ви встановили до цього часу:

    brew uninstall docker-compose
    brew uninstall docker-machine
    brew uninstall docker
    
  2. Встановіть додаток вручну або через Homebrew-Cask :

    brew cask install docker
    

    Примітка: Ця програма буде створювати необхідні посилання docker, docker-compose, docker-machineі т.д.

  3. Після запуску програми перевірте значок статусу китів Docker у меню стану.

  4. Тепер ви повинні бути в змозі використати docker, docker-compose, docker-machineкоманди , як зазвичай в терміналі .

Пов'язані:

Linux / Windows

Завантажте Docker CE зі сторінки завантаження та дотримуйтесь інструкцій.


Примітка 2018-5-20: додаток Docker CE на macOS досить хитромудрий. кожного разу, коли я відкриваю його, просто застигаю прямо, я нічого не можу зробити. Я спробував виправити проблему в Google, поки що над нею працюю
NamNamNam

1
Це правильна відповідь на повідомлене питання, дякую!
paranza

6

Я знав, що відповідей у ​​цій публікації вже багато. Просто хотілося б додати одну просту відповідь, яка вирішує вищезазначену проблему.

sudo systemctl start docker

Запустіть вищезгадану команду, і вона запустить усі пов'язані з докером потоки / послуги.


5

У мене просто був такий самий випуск, який працює на Amazon AWS .

Ось що я спробував:

  • Налаштуйте docker-machineлокально за допомогою вже наявного екземпляра AWS
  • Використовується загальна установка
  • Він на зразок підключений, але оскільки віддалений порт був закритий, він не вдався
  • Після цього демон Докера відмовився запускати, але біг dockerdспрацював ...

Це було протестовано наступним чином на віддаленій машині:

service docker start # Also restart, no success
systemctl start docker # Also restart, no success
dockerd # Success

Я видалив /var/lib/dockerі видалив усе, але успіху після перевстановлення не було. На жаль, у мене не зберігаються журнали від збоїв, але я docker.serviceпросто відмовився починати.

Однак, що остаточно вирішило моє питання, було в основному:

sudo usermod -aG docker $(whoami)

4

Наступний веб-сайт Docker's DOC: Керуйте Docker як некорінним користувачем

1) Створити групу Docker

sudo groupadd docker 

2) Зробіть приналежність користувача до докер-групи, щоб отримати привілеї групи.

sudo usermod -aG docker $USER

Перевірте, чи встановлена ​​змінна середовища DOCKER_HOST для вашої оболонки.

env | grep DOCKER_HOST

Якщо вона існує,

unset DOCKER_HOST

Тоді це має працювати:

docker run hello-world

1
ви - рятувальник життя unset DOCKER_HOSTпрацював на мене
користувач3014595

4

Якщо ви працюєте на OS X за допомогою інструмента Docker, дотримуйтесь цього.

Перезапустіть демон і налаштуйте своє оточення:

docker-machine restart

І потім

docker-machine env

Нарешті,

eval $(docker-machine env)

Для тестування демон працює:

docker ps -aабо docker-machine ls. Тут буде перераховано всі контейнери.


2

У мене така ж проблема. У CentOS 6.5:

ps aux |grep `cat /var/run/docker.pid`

Якщо на ньому не відображається процес демона Докера, я набираю:

docker -d

Потім Ctrl+, Dщоб зупинити Докер. Оскільки ми використовуємо -dопцію, Докер буде працювати як демон. Тепер ми можемо зробити:

service docker start

Тоді я можу зробити docker pull centos. Це все.

ПРИМІТКА. Якщо це не спрацює, ви можете спробувати yum update, а потім повторити їх ще раз, бо я yum installперед цим.


2

Служба Docker може не працювати.

Якщо ви користуєтесь RedHat / Fedora / CentOS, спробуйте це:

sudo systemctl start docker

Якщо ви перебуваєте на Ubuntu / Debian:

sudo service start docker

Docker почне працювати на вашому хості та відповідному порту.


1

Перевірте, чи ви використовуєте Docker Machine :)

Біг docker-machine env defaultповинен зробити трюк.

Тому що згідно документації:

Docker Machine - це інструмент, що дозволяє встановлювати Docker Engine на віртуальних хостах і керувати хостами за допомогою docker-machineкоманд. Ви можете використовувати Machine для створення хостів Docker у вашому локальному вікні Mac або Windows, у мережі вашої компанії, у вашому центрі обробки даних або в хмарних постачальниках, таких як AWS або Digital Ocean.

За допомогою docker-machineкоманд можна запустити, перевірити, зупинити та перезапустити керований хост, оновити клієнт Docker та демон і налаштувати клієнт Docker для розмови з вашим хостом.

Наведіть машину CLI на запущений керований хост, і ви можете запускати dockerкоманди безпосередньо на цьому хості. Наприклад, працювати docker-machine env defaultв точці до хосту default, дотримуйтесь інструкцій на екрані для завершення envустановки і запуску docker ps, docker run hello-worldі так далі.

https://docs.docker.com/machine/overview/


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

Щоб виправити, потрібно видати наступні команди в терміналі. Я поясню кожен крок:

# Uninstall Docker from apt packages
$ sudo apt-get remove docker docker.io

# Remove it from the libraries just to be
# sure it's gone forever
$ sudo rm -rf /var/lib/docker/*

Тепер, якщо ви хочете спростити речі та отримати більше часу, ви можете запустити мій initсценарій із параметром installDocker:

# Pull the init script from GitHub
$ wget https://github.com/dminca/dotfiles/blob/master/init

# Add rights to run the script
$ chmod 755 init

# Just run the script with the installDocker parameter
$ ./init installDocker

Перезавантаження не обов’язково, але я пропоную вам зробити це, щоб переконатися, що все працює безперебійно.


1

У мене була та сама проблема із запуском Docker 1.10 на Ubuntu 14.04, і жоден із наведених відповідей не працював. Для мене виправленням було вказати драйвер пам’яті під час запуску демона Docker.

sudo docker daemon --storage-driver=devicemapper

1

Якщо ви використовуєте gitlab-ci / gitlab-runners, ви отримаєте цю помилку, якщо у вас немає дозволу на доступ /var/run/docker.sock.

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

Щоб вирішити проблему:

sudo usermod -aG docker gitlab-runner

Підтвердити за допомогою:

sudo -u gitlab-runner -H docker info

Сподіваюся, що це допомагає.


0

Якщо регенерація сертифікатів TLS не працює

docker-machine regenerate-certs default

Спробуйте перезапустити докерну машину та встановити змінну env:

docker-machine restart default
eval $(docker-machine env default)

Перевірте, чи працює машина:

docker-machine ls

або альтернативно

docker run hello-world

Це працювало для мене. Однак якщо ви все ще не маєте демон, на сторінці усунення несправностей Docker викладено детальний процес зупинки, видалення та створення нової машини.


0

Також у мене виникла проблема "Не вдається підключитися до демона Docker. Чи працює цей демон на цьому хості?".

Я забув використати sudo. Сподіваємось, це допоможе комусь із нас.

$:docker images
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

$:sudo docker images
REPOSITORY   TAG   IMAGE ID   CREATED   SIZE
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.