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

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

Как мне решить проблему?

LiJung
источник
7
Вы использовали sudo при запуске docker -d?
Бен Уэйли
Я заметил, что в ошибке это говорит no such file or directory[/var/lib/docker|2462000b]. Существует ли /var/lib/dockerв вашей системе? Если нет, то я думаю, что вам нужно переустановить Docker.
Бен Уэйли
3
У меня та же проблема (я не могу подключиться к демону, который, как показывает «ps», все еще работает), за исключением того, что я не получаю никаких сообщений «файл не найден» при запуске демона. / var / lib / docker существует.
Джонатан Хартли
Вы используете докер на VPS?
поросёнок
Установите рабочий стол Docker отсюда, он решит это. docs.docker.com/docker-for-mac/install
Гай Ассаф

Ответы:

642

Linux

Документация «Действия после установки Linux» раскрывает следующие шаги:

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

Mac OS X

Как говорит Dayel Ostraco, необходимо добавить переменные окружения:

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выводит комментарии для руководства процессом.

molavec
источник
Да. Это было проблемой для меня. Я добавил своего пользователя в группу Docker, и теперь я могу подключиться к демону. Спасибо
Богдан
FWIW, ссылка на конкретный раздел это
асимметричный
20
Если по какой-то причине вы не хотите выходить из системы, вы можете использовать newgrpкоманду для запуска новой оболочки в этой новой группе. Как это: newgrp docker.
Денилсон Са
sudo chown $ USER: $ USER / path / to / docker / binary
Айвор Скотт,
У меня не было времени перезапустить Bash. Так и alias docker='sudo docker'сделал трюк. : p
LovaBill
150

Linux

Чтобы запустить демон docker в 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 изначально в OS 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 и локальной виртуальной машиной .


Установить Docker.app на macOS

В качестве альтернативы вышеприведенному решению вы можете установить приложение Docker:

brew cask install docker

Проверьте этот пост для более подробной информации . Смотрите также: Невозможно подключиться к демону Docker в macOS

kenorb
источник
1
Запуск докера службы sudo работает с 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
Мне нужно было установить docker-compose, docker-machine и docker через 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... запускаю этот eval после того, как команда docker-machine start defaultсделала свое дело.
Эмилио Ферруччи
100

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

Чтобы решить эту проблему, вы можете:

A) Переустановите Docker Toolbox с помощью официального установщика ( https://www.docker.com/products/docker-toolbox ) или просто

Б) Выполните следующие команды по порядку:

# 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
У меня Хост не существует: «по умолчанию»
Роман Гауфман
@ RomanGaufman: это работает для вас: Docker-машина запускается по умолчанию?
KAD
1
@RomanGaufman Я должен был перезапустить свой терминал, прежде чем команда выполнена успешно.
anon58192932
это потому, что ip виртуальной коробки vm меняется каждый раз, когда вы перезагружаете свой mac?
Цуй Пэнфэй 崔鹏飞
@ RomanGaufman ошибка решается с помощью ответа (в настоящее время) ниже: stackoverflow.com/a/34887761/634576
Дейв Schweisguth
47

Обычно это происходит, когда вы не в dockerгруппе. Вы можете добавить себя в dockerгруппу с помощью:

sudo usermod -aG docker yourusername

или

sudo usermod -aG docker $(whoami)

После этого вам необходимо выйти и снова войти на сервер.

В качестве альтернативы, вы можете использовать sudoлюбую команду Docker.

nPcomp
источник
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

kevthanewversi
источник
1
Я начал с этого ответа, и это помогло мне!
Анджей Мартина
2
Проблема с этим подходом заключается в том, что вы должны повторять этот шаг каждый раз, когда демон перезапускается
MFIhsan
Здравствуйте, @MFIhsan. Умный системный администратор скажет вам просто создать bash-скрипт для этих команд и добавить его в crontab, чтобы он запускался при перезагрузке / запуске, как описано здесь> stackoverflow.com/a/29247942/3469960
kevthanewversi
Обычный пользователь никогда не должен владеть носком! Если у вас нет носка, убедитесь, что вы в группе колес и группе, к которой принадлежит носок ... а не в группе владельцев носков!
CrazyMerlin
16

Лучший способ выяснить, почему Docker не работает, - запустить демон вручную.

$ 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

Это произошло потому, что экземпляр был клонирован с другой виртуальной машины. Мне просто нужно было удалить pid-файл, и все работало потом.

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

Роберт Элвелл
источник
1
Это также помогло мне найти проблему (к сожалению, я видел ваш ответ после этого). У меня был пропавший apparmorпакет.
Пьер де ЛЕСПИНАЙ
Это решение сработало для меня. После того как я удалил /var/run/docker.pid, я наконец смог запустить докер.
jirikadlec2
3
Предупреждение: «-d» устарело, оно скоро будет удалено. Смотрите использование. ВНИМАНИЕ [0000], пожалуйста, используйте вместо этого «docker daemon».
juanmf
3
флаг указан, но не определен: -d
Луис де Соуза
Чтобы запустить демон docker вручную в последних версиях с включенной отладкой, используйте: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
Все эти ответы, которые говорят: «Вам нужно sudo systemctl start docker», всегда предполагают, что для запуска есть служба docker. Если при установке docker возникли какие-либо проблемы, файл конфигурации службы может даже не существовать, и в этом случае вы получите: «Unit docker.service не загружен»
CrazyMerlin
12

Сделайте, ps aux | grep dockerчтобы увидеть, работает ли демон. Если не запустить/etc/init.d/docker start

Реза С
источник
5
У меня такая же проблема. «ps» показывает, что мой процесс докера все еще выполняется.
Джонатан Хартли
Остановка и запуск докера (который уже работал) выправил меня.
Кайл
14
sudo service docker startговорит мне «запуск / запуск докера, процесс 4633», затем sudo service docker statusговорит «остановка / ожидание докера»
Pierre de LESPINAY
12

Я перезапускаю Docker после его установки:

$ sudo service docker stop
$ sudo service docker start

И это работает.

камбуз
источник
9

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

export DOCKER_HOST=127.0.0.1:4243 >> ~/.bashrc
kayn
источник
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

Но я не решил свою проблему, потому что я забыл выполнять свои команды Docker без sudo . Для тех, кто сталкивается с этой проблемой, попробуйте это проверить.

Пытаться

$ sudo docker info

вместо этого:

$ docker info
Таха Эмара
источник
Это была именно моя проблема при попытке запустить docker buildUbuntu Xenial.
ashnazg
9

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

sudo service docker stop && sudo service docker start

просто начать это.

kvadityaaz
источник
3
Или sudo service docker restartпроще 😊
fr1sk
8

У меня такая же ошибка и пытаюсь docker-machine regenerate-certsилиeval.. у меня не получилось.

Это на OS X 10.11.3 (El Capitan) и Docker v1.10.1. Я смог исправить это, только удалив и заново создав Docker-машину. Источник

Если он работает docker-machine ls, он показывает вывод, аналогичный приведенному ниже;

DOCKER

неизвестный

ОШИБКИ

Невозможно запросить версию докера: не удается подключиться к конечной точке механизма докера

Попробуйте удалить ваш докер с помощью;

docker-machine rm -f default

Где defaultваше имя машины Docker. Затем;

docker-machine create -d virtualbox default

Создает новую машину Docker.

Дважды проверьте, что теперь все выглядит нормально (без ошибок или неизвестного Docker) с помощью:

docker-machine ls

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

Керем
источник
6

У меня была такая же проблема - «Не удается подключиться к демону Docker». (за исключением того, что я не получил никаких ошибок 'file not found' при попытке запустить сервер.)

'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

Поэтому я запоздало понял, что при установке docker, возможно, зарегистрировал демона с помощью upstart, который запустил его для меня. Следовательно, попытка убить демона для ручного перезапуска не удалась (операция не разрешена). Итак, я сделал

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

Затем выйдите и войдите.

dormi330
источник
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 со страницы загрузки и следуйте инструкциям.

kenorb
источник
Примечание: приложение Docker CE на macOS довольно дерьмовое. каждый раз, когда я открываю его, он просто застывает на месте, ничего не может сделать. Я попытался Google и исправить проблему, пока все еще работаю над этим
NamNamNam
1
Это правильный ответ на заявленную проблему, спасибо!
Паранза
6

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

sudo systemctl start docker

Запустите приведенную выше команду, и она запустит все связанные с докером потоки / сервисы.

Пракасам Дхамодхиран
источник
5

У меня просто была такая же проблема, работающая на Amazon AWS .

Вот что я пытался:

  • Настройте docker-machineлокально с уже существующим экземпляром AWS
  • Используется общая настройка
  • Это как-то связано, но так как удаленный порт был закрыт, это не удалось
  • После этого демон Docker отказался запускаться, но запуск 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)
Deko
источник
4

Следующий DOC-сайт Docker : Управление Docker от имени пользователя без полномочий root

1) Создать Docker Group

sudo groupadd docker 

2) Сделать пользователя членом группы Docker, чтобы получить привилегии группы.

sudo usermod -aG docker $USER

Проверьте, установлена ​​ли переменная окружения DOCKER_HOST для вашей оболочки.

env | grep DOCKER_HOST

Если это существует,

unset DOCKER_HOST

Тогда это должно работать:

docker run hello-world
blasrodri
источник
1
ты спасатель unset DOCKER_HOSTработал для меня
user3014595
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-демона не существует, я набираю:

docker -d

Затем Ctrl+, Dчтобы остановить Docker. Поскольку мы используем эту -dопцию, Docker будет работать как демон. Теперь мы можем сделать:

service docker start

Тогда я могу сделать docker pull centos . Это все.

ПРИМЕЧАНИЕ: если они не работают, вы можете попробовать yum update, а затем повторить это снова, потому что я yum installдо этого.

wuranbo
источник
2

Возможно, Docker Service не запущен.

Если вы используете 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. У меня тоже была такая же проблема. Проблема была в сокетах, выделенных для 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

Для исправления необходимо выполнить следующие команды в терминале. Я объясню каждый шаг:

# 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

Это сработало для меня. Однако, если у вас по-прежнему нет демона, на странице устранения неполадок Докера подробно описан процесс остановки, удаления и создания нового компьютера.

nikheel
источник
0

Я также получил проблему «Не удается подключиться к демону Docker. Работает ли демон 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
Хабиб Perwad
источник