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


118

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

root@# docker-compose -f docker-compose-deps.yml up -d
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

Версия Докера

root@# sudo docker     version
Client:
Version:      1.9.1
API version:  1.21
Go version:   go1.4.2
Git commit:   a34a1d5
Built:        Fri Nov 20 13:20:08 UTC 2015
OS/Arch:      linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Версия Docker-Compose

root@# docker-compose --version
docker-compose version 1.5.2, build 7240ff3

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

root@# sudo service docker stop
stop: Unknown instance: 
root@# sudo service   docker start
docker start/running, process 5375

Если я сбегу ps aux | grep docker

root@# ps aux | grep docker
root      4233  0.0  0.0  13692  2204 pts/15   S+   10:27   0:00 grep --color=auto docker

Любая помощь будет принята с благодарностью. Дайте мне знать, если вам понадобится дополнительная информация.


1
Пожалуйста, не портите свои сообщения. После того, как вы разместили вопрос, вы передаете контент сообществу Stack Overflow в целом (по лицензии CC-by-SA). Если вы хотите отключить эту публикацию от своей учетной записи, см. Раздел «Каков правильный маршрут для запроса на отключение?» .
Ошибки

Ответы:


269

У меня была такая же ошибка после 15 минут отладки. Оказывается, все, что ему нужно, это sudo:) Посмотрите [Создать группу Docker] здесь https://docs.docker.com/engine/installation/linux/ubuntulinux/, чтобы избавиться от префикса sudo.


36
Им нужна ошибка получше = / У этого вопроса 13 000 просмотров
Джонатан

4
человек, вы сэкономили около 30 часов только для тех, кто проголосовал, и, вероятно, это действительно только 1% времени, которое вы действительно сэкономили
vak

5
реальное исправление - это создание группы докеров, в то время sudoкак, на мой взгляд, это всего лишь обходной путь / взлом. поскольку часть создания группы здесь не объясняется, дается только ссылка, и содержимое этой ссылки изменено, я считаю это ответом только на ссылку, и теперь он по существу бесполезен (для реальной части исправления). не могли бы вы добавить описание того, как добавить эту группу?
hoijui

3
Я тоже считаю, что sudoэто плохая идея. См. Документацию Docker по управлению Docker от имени пользователя без полномочий
jwhitlock

6
По сути, все, что вам нужно сделать sudo usermod -aG docker $USER, это работать и потом.
user2340939

67

У меня была эта проблема, и я не хотел все испортить с помощью sudo. В ходе расследования я попытался получить некоторую информацию:

docker info

Удивительно, но у меня была следующая ошибка:

Получен отказ в разрешении при попытке подключиться к сокету демона Docker в unix: ///var/run/docker.sock: получить http: ///var/run/docker.sock/v1.38/info : набрать unix / var /run/docker.sock: connect: в разрешении отказано

По какой-то причине мне не хватило привилегий, моя проблема решена следующей командой:

sudo chown $USER /var/run/docker.sock

И вуаля !


Как насчет повторного перезапуска докера? Мы должны снова сделать этот чавн?
Light.G

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

По умолчанию Docker будет работать docker.sockс некорневой группой dockerпо умолчанию. Но мы можем изменить это с помощью -Gфлага во время запуска демона Docker. В моем случае я добавляю группу $USERNAME, означает добавление группы докеров, а затем перезагружаю свой компьютер (ubuntu 16.04, ПК). Это работает хорошо. И это рекомендуется в документации докера.
Light.G

3
У меня тоже работает :)
Камил Дж.

27

Похоже, ваша проблема была вызвана старой ошибкой Docker, когда файл сокета не был воссоздан после сбоя Docker. Если это проблема, то переименование файла сокета должно позволить его воссоздать:

$ sudo service docker stop
$ sudo mv /var/lib/docker /var/lib/docker.bak
$ sudo service docker start

Поскольку эта ошибка исправлена, большинство людей, получающих ошибку Couldn't connect to Docker daemon, вероятно, получают ее, потому что они не входят в dockerгруппу и не имеют разрешений на чтение этого файла. Запуск с sudo docker ...исправит это, но это не лучшее решение.

Docker можно запускать от имени пользователя без полномочий root (без sudo), у которого есть соответствующие разрешения группы. Linux после установки документации подробностей. Краткая версия:

$ sudo groupadd docker
$ sudo usermod -aG docker $USER
# Log out and log back in again to apply the groups
$ groups  # docker should be in the list of groups for your user
$ docker run hello-world  # Works without sudo

Это позволяет пользователям в dockerгруппе для запуска dockerи docker-composeкоманды без sudo. Сам Docker запускает root, что позволяет выполнять некоторые атаки, поэтому вам все равно нужно быть осторожным с тем, какие контейнеры вы запускаете. Дополнительные сведения см. В документации по безопасности Docker .


Этот вопрос относится к установке Linux, и исправление включает изменения в хост-системе Linux, чтобы исправить это. Вы получите лучшую информацию, если опубликуете аналогичный вопрос с той же детализацией, но для Windows. Чтобы решить эту проблему, я рекомендую внимательно прочитать документацию Docker для Windows
jwhitlock

10

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

service docker start

Не забудьте включить своего пользователя в группу докеров.


Когда я столкнулся с этой ошибкой, я работал как root. Казалось, что sudoэто исправлено для других -_- Рад обнаружить, что это действительно то, что я забыл сделать. Так просто!
Will

8

Вам следует добавить своего пользователя в группу «docker» примерно так:

sudo usermod -aG docker $ {ПОЛЬЗОВАТЕЛЬ}


5

Я получил эту ошибку, когда в Dockerfileкаталоге были файлы , которые не были доступны текущему пользователю. dockerТаким образом, не удалось загрузить полный контекст в демон и появилось сообщение « Не удалось подключиться к демону Docker по http + docker: // localunixsocket ».


2
Спасибо! Это решило проблему для меня. Легко проверить, так как все команды docker работали, а docker-compose - нет. Также docker-compose работал в другом каталоге. Очень вводящее в заблуждение сообщение об ошибке, BTW.
Csongor Fagyal

1
Это действительно должно быть выше
Арлен Андерсон

1
Спасибо! работал у меня. Использование docker build .вызовет любые проблемы с разрешением.
Everyman

Единственное, что сработало - почему сообщения об ошибках Docker такие плохие? Спасибо!
coderMe

4

Один из способов решить эту проблему - сначала добавить вашего пользователя в dockerгруппу, выполнив следующие

sudo usermod -aG docker $USER

ВАЖНО: Не забудьте выйти из системы (а не только из терминала) и снова войти, чтобы это вступило в силу!


sudo usermod -aG docker $ {USER} Мы также должны выйти и войти в систему, чтобы применить изменения: su - $ {USER}
user3785966

3

Из вывода "ps aux | grep docker" похоже, что демон docker не запущен. Попробуйте использовать методы ниже, чтобы узнать, что не так и почему докер не запускается.

  1. Проверьте журналы докеров

$ sudo tail -f /var/log/upstart/docker.log

  1. Попробуйте запустить докер в режиме отладки

$ sudo docker -d -D


2

В моем случае ваша служба докеров может быть остановлена

Команда для запуска службы докеров:

$ sudo systemctl start docker

Команда для проверки запуска:

$ sudo docker run hello-world


2

Другая причина, по которой может появиться эта ошибка: для меня это было неправильное определение пути к изображению в docker-compose.yml:

  service:
    image: ${CONTAINER_REGISTRY_BASE}/my-service
   ...

Сначала выгляди хорошо, но я CONTAINER_REGISTRY_BASE=eu.gcr.io/my-project/установил на env. По-видимому, //эту ошибку вызвал путь к изображению.

docker-compose: v.1.21.2
docker: 18.03.1-ce

2

просто попробуйте sudo. Похоже, проблема с разрешением!

sudo docker-compose -f docker-compose-deps.yml up -d

у меня это сработало.


1

Я использовал Ubuntu 16.04 и тоже обнаружил эту проблему, когда использовал docker-compose. Я исправил это, выполнив эту команду.

$ sudo systemctl start docker
$ sudo docker-compose build

1

Есть небольшая вероятность, что вы удалили машину по умолчанию? Но сначала проверьте, все ли файлы там (OSX, аналогично в других системах)

brew install docker docker-compose docker-machine xhyve docker-machine-driver-xhyve
brew link docker docker-compose docker-machine xhyve docker-machine-driver-xhyve

sudo chown root:wheel /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
sudo chmod u+s /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve

Также установите приложение Docker, так как в нем намного проще поддерживать контейнеры:

brew cask reinstall docker

ans запускает приложение Docker из поисковика (дождитесь полного запуска службы)

Затем проверьте установку с помощью:

docker-machine ls

если в списке нет машин, создайте его и запустите:

docker-machine create default
docker-machine start default

После этого build, compose и все остальные команды должны работать правильно.


1

в моем случае это потому, что разрешение ubuntu,

  1. Элемент списка

проверить разрешение

docker info 

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

sudo chmod -R 777 /var/run/docker.sock

0

Для меня исправление заключалось в установке более новой версии (1.24) docker-composeиспользования этой статьи .

Предыдущая версия (1.17) была установлена ​​из ubuntuрепозитория по умолчанию, но после установки более новой версии мне удалось запустить контейнер. Надеюсь, это кому-то поможет.



-1

В моем случае у меня такая же ошибка, когда я пытаюсь, docker-compose build и мое решение было просто добавитьsudo

sudo docker-compose build

-2

Я нашел это и, похоже, решил мою проблему.

GitHub Fix Docker Daemon Crash

Я изменил содержимое моего файла docker-compose-deps.yml, как показано по ссылке. Потом я побежал docker-compose -f docker-compose-deps.yml up -d. Потом поменял обратно, и почему то заработало. Мне не нужно было продолжать шаги по предоставленной мной ссылке, но первые два шага устранили проблему для меня.


2
ubuntu 16.04: просто добавьте sudo: sudo docker-compose up -d
Moccine

В качестве ответа этого недостаточно. Если вы хотите принять свой ответ, вы должны указать самую основную причину вашей проблемы. В противном случае это было бы настоящим заблуждением для других. Кстати, здесь есть другие ответы, помогли ли они? Поскольку я не видел ваших комментариев.
Light.G
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.