Не удается подключиться к докеру из docker-compose


163

Я установил docker-machine 0.1.0 и docker-compose 1.1.0 в Mac OS 10.8.5.
Docker-машина работает нормально и может подключаться через Docker-машину SSH.

$ docker-machine ls
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
dev    *        virtualbox   Running   tcp://192.168.99.100:2376   

Однако не может подключиться из docker-compose.

$ docker-compose up

Не удалось подключиться к демону Docker по адресу http + unix: //var/run/docker.sock - он работает?

Если он находится в нестандартном месте, укажите URL-адрес с помощью переменной среды DOCKER_HOST.

Мой Dockerfile и docker-compose.yml здесь.

Dockerfile

FROM centos:centos7
DOCKER_HOST tcp://192.168.99.100:2376

докер-compose.yml

web:
  build: .

Почему не удается подключиться? Любые идеи?


49
Работает ли docker-machineкак root? Я только что пришел сюда с той же проблемой на Ubuntu, и это были разрешения на сокете - sudoсделали свое дело.
SLD

7
Для тех, кто в Linux, вам, возможно, просто нужно добавить в группу Docker .
Batandwa

5
просто беги: sudo docker-compose up
Гириш Гупта

Я была такая же проблема. Вам нужно перезапустить докер. sudo service docker restartили sudo service docker startя решил это с этим.
О.М. Бхаратия

Для тех, кто использует Ubuntu, вы должны использовать sudo, и вы не должны добавлять пользователей в группу Docker . Просмотреть комментарии в общепринятом ответ: askubuntu.com/questions/477551/...
кас

Ответы:


89

Докер работает. Но вам нужно экспортировать некоторую среду для подключения к машине Docker. По умолчанию dockerклиент CLI пытается связаться с демоном с помощью http+unix://var/run/docker.sock(как показано в сообщении об ошибке).

Экспортируйте правильные переменные окружения, используя, eval $(docker-machine env dev)а затем повторите попытку. Вы также можете просто запустить, docker-machine env devчтобы увидеть переменные окружения, которые он будет экспортировать. Обратите внимание, что один из них DOCKER_HOST, так же, как и в сообщении об ошибке, может потребовать установки.


2
Вы можете поместить эту команду ( eval "$(docker-machine env default)") в свой bin / postactivate, чтобы убедиться, что она всегда актуальна.
Даннид

1
Где я могу найти файл bin / postactivate?
Лукас Шульце

Или вы забыли установить докер: $ eval $(docker-machine env dev) Command 'docker-machine' not found, but can be installed with: sudo snap install docker
R OMS

226

Простое решение для меня: sudo docker-compose up


ОБНОВЛЕНИЕ 2016-3-14: В какой-то момент процесса установки docker (или docker-compose?) Есть предложение и пример добавления вашего имени пользователя в группу «docker». Это позволяет вам избежать использования sudo перед всеми командами docker, например:

~ > docker run -it ubuntu /bin/bash
root@665d1ea76b8d:/# date
Mon Mar 14 23:43:36 UTC 2016
root@665d1ea76b8d:/# exit
exit
~ > 

Внимательно посмотрите на вывод команд установки (как docker, так и 2-й установки для docker-compose), и вы найдете необходимый шаг. Это также задокументировано здесь: https://subosito.com/posts/docker-tips/

Sudo? Нет!

Надоело вводить sudo docker каждый раз, когда вы вводите команду? Да, есть способ справиться с этим. Хотя, естественно, для docker требуется пользователь root, мы можем предоставить группу, эквивалентную корневому каталогу, для операций docker.

Вы можете создать группу с именем docker, а затем добавить нужного пользователя в эту группу. После перезапуска службы Docker пользователю не нужно будет вводить sudo каждый раз при выполнении операций Docker. Как это выглядит на оболочке команд? как корень, вы идете:

> sudo groupadd docker
> sudo gpasswd -a username docker
> sudo service docker restart 

Готово!

ОБНОВЛЕНИЕ 2017-3-9

Инструкции по установке Docker были обновлены здесь.

Действия после установки для Linux

Этот раздел содержит дополнительные процедуры для настройки хостов Linux для лучшей работы с Docker.

Управление Docker от имени пользователя без полномочий root

Демон docker связывается с сокетом Unix вместо порта TCP. По умолчанию этот сокет Unix принадлежит пользователю root, и другие пользователи могут получить к нему доступ только через sudo. Демон docker всегда запускается от имени пользователя root.

Если вы не хотите использовать sudo при использовании команды docker, создайте группу Unix с именем docker и добавьте в нее пользователей. Когда запускается демон docker, он делает владение сокетом Unix доступным для чтения / записи группой docker.

Чтобы создать группу Docker и добавить своего пользователя:

# 1. Create the docker group.
$ sudo groupadd docker

# 2. Add your user to the docker group.
$ sudo usermod -aG docker $USER

# 3. Log out and log back in so that your group membership is re-evaluated.

# 4. Verify that you can run docker commands without sudo.
$ docker run hello-world

Эта команда загружает тестовое изображение и запускает его в контейнере. Когда контейнер запускается, он печатает информационное сообщение и завершает работу.


1
По какой-то причине sudo - единственный способ заставить его работать: O: O: O
Джейми Хатбер

12
Вместо выхода ... вы можете использовать команду:newgrp docker
Тьяго Фалькао

Ааа подробный ответ с подвопросом :-)
Sukumaar

1
Re: «Простое решение для меня: sudo docker-compose up». Когда я пытаюсь это сделать, я получаю:sudo: docker-compose: command not found
mblakesley

38

Если вы начали использовать docker sudo, то вам нужно запустить docker-compose с sudo Like:sudo docker-compose up


Это сработало для меня, когда я побежал sudo docker-compose buildвместо docker-compose build.
anms_pro

26

По умолчанию демон docker всегда запускается от имени пользователя root, поэтому вам необходимо присоединиться sudoк командам Docker.

Если вы не хотите использовать sudo при использовании команды docker, создайте группу Unix с именем docker и добавьте в нее пользователей. Когда запускается демон docker, он делает владение сокетом Unix доступным для чтения / записи группой docker.

Чтобы создать группу Docker и добавить своего пользователя:

  1. Создайте группу докеров.

    $ sudo groupadd docker

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

    $ sudo usermod -aG docker $USER

  3. Выйдите из системы и снова войдите в нее, чтобы вновь оценить членство в группе.

  4. Убедитесь, что вы можете использовать команды Docker без sudo.

    $ docker run hello-world

Эта команда загружает тестовое изображение и запускает его в контейнере. Когда контейнер запускается, он печатает информационное сообщение и завершает работу.

Описанные выше шаги взяты из официальной документации Docker .


Как мы можем сделать это на Windows установлен Docker?
Джефф Кук

Кроме того, для исправления docker-compose я назначил пользователя, выполняющего docker-composeроль владельца, /usr/local/bin/docker-composeа затем перезапустил службу
Сэм,

groupчленство может быть обновлено, su - $USERчтобы сохранить
выход из системы

20

Когда вы получаете сообщение об ошибке :

ОШИБКА: Не удалось подключиться к демону Docker по адресу http + docker: // localhost - он работает?

Решение будет:

  1. Сначала попробуйте убедиться, что Docker Service запущен и работает, как и ожидалось, на вашем удаленном / локальном компьютере:sudo service docker status

    если нет - запустить sudo service docker start или sudo systemctl start docker(зависит от некоторых версий Linux, см. инструкции по началу работы с Docker ).

  2. Во-вторых, запустите докер как sudo sudo docker-compose up


16

sudo systemctl start docker - запустить сервис Docker.

sudo docker-compose up после этого.

У меня есть Fedora 26, и, пытаясь решить ту же проблему, я в итоге зашел на страницу Docker Compose на странице разработчиков Fedora, а затем на страницу Docker для разработчиков Fedora , которая мне помогла.

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

На странице разработчиков Fedora есть инструкция, как включить Docker для запуска с системой:

sudo systemctl enable docker


Заменить systemctlс , launchctlесли вы работаете на Mac.
Рохит Свами

6

Если вы используете Linux, возможно, вы не docker-machineустановили его, поскольку он установлен по умолчанию только на компьютерах Windows и Mac.

В этом случае вам нужно будет перейти по адресу : https://docs.docker.com/machine/install-machine/, чтобы найти инструкции по его установке в вашей версии Linux.

После установки повторите попытку, docker-compose upпрежде чем пытаться что-либо перечисленное выше.

Надеюсь, это кому-нибудь поможет. Это сработало для моей установки devilbox в Fedora 25.


5

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

alias docker-compose="sudo docker-compose"
alias docker="sudo docker"

4

если вы используете docker-machine, то вы должны активировать окружение с помощью переменной env . если вы не используете docker-machine, то запускайте команды с помощью sudo


3

Кто-нибудь проверял логи?

В моем случае сообщение об ошибке /var/log/upstart/docker.logбыло:

Listening for HTTP on unix (/var/run/docker.sock) 
[graphdriver] using prior storage driver "aufs" 
Running modprobe bridge nf_nat failed with message: , error: exit status 1 
Error starting daemon: Error initializing network controller: Error creating default "bridge" network: can't find an address range for interface "docker0" 

Стоит упомянуть, что я включил vpn, так что: $ sudo service openvpn stop $ sudo service docker restart $ docker-compose up|start $ sudo service openvpn start было решение.


3

Ответ от @srfrnk у меня работает.

В моей ситуации у меня был следующий файл docker-compose.yml:

  nginx:
    build:
      context: ./
      dockerfile: "./docker/nginx.staging/Dockerfile"
    depends_on:
      - scripts
    environment:
      NGINX_SERVER_NAME: "some.host"
      NGINX_STATIC_CONTENT_OPEN_FILE_CACHE: "off"
      NGINX_ERROR_LOG_LEVEL: debug
      NGINX_BACKEND_HOST: scripts
      NGINX_SERVER_ROOT: /var/www/html
    volumes:
      - ./docker-runtime/drupal/files:/var/www/html/sites/default/files:rw
    ports:
      - 80:80

./docker-runtimeвладелец и группа - это rootкогда другие файлы владельца - мой пользователь. Когда я пытался построитьnginx

Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

Я добавил ./docker-runtimeк , .dockerignoreи это решить мою проблему.


3

во время бега docker-compose pull- я получаю ниже ошибки

ОШИБКА: не удалось подключиться к демону Docker по адресу http + docker: // localhost

это работает?

решение -

sudo service docker start 

проблема решена


2

У меня были те же симптомы.

Только различие, что это произошло только во время работы docker-compose build docker ps. Случалось и с версией 2.xтак же 3.x. Перезапущен dockerсервис, потом машина ... Даже переустановил docker+ docker-compose.

Перепробовал все, но ничего не помогло.

Наконец, я попытался собрать Dockerfile «вручную» с помощью docker build.

Видимо у меня была проблема с правами доступа к файлу / папке внутри Dockerконтекста. Он пытался прочитать контекст при запуске сборки и потерпел неудачу с соответствующим сообщением об ошибке. Однако это сообщение об ошибке не распространяется на docker-composeкоторый только показываетCouldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

Обнаружив, что решением было просто добавить файл / папку в .dockerignoreфайл, поскольку он не был необходим для сборки. Другое решение, возможно, было chownили chmodэто.

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


У меня была такая же проблема: права доступа к файлу в смонтированном томе. В моем случае у меня был сертификат SSL, которым владел root, который был помещен в том Docker. chown/ chmodисправил это. Страшное сообщение об ошибке, но они работают над этим. См github.com/docker/compose/issues/5318
bcattle

2

$ sudo docker-compose up

Я выполнил шаги, описанные в ответе выше, чтобы добавить $ USER в групповой докер. я не хотел добавлять новый групповой докер, потому что в моей установке докера автоматически создавалась группа с именем docker.

Docker CE установлен и работает. Группа докеров создана, но к ней не добавлено ни одного пользователя. Вам нужно использовать sudo для запуска команд Docker. Перейдите к постинсталляции Linux, чтобы позволить непривилегированным пользователям запускать команды Docker и другие необязательные этапы настройки.

но использование docker-compose также не сработало. Это дало такую ​​же предыдущую ошибку. Так что в моем случае (Ubuntu 18.10) sudo docker-compose исправил проблему.

ps: @ спасибо за совет.


1
Может быть, лучше сначала поставить решение, а те, кто объясняет, ниже. Также вы можете использовать эти кнопки в редакторе для лучшего форматирования вашего ответа.
Tiw

2

Я знаю, что это глупо, но в моем случае я просто попытался, sudoи это сработало как шарм.

в вашем случае просто попробуйте: $ sudo docker-compose up


1

попробуй это:

sudo ln -s / usr / local / bin / docker-compose / usr / bin / docker-compose


1

Я решил проблему, используя следующие шаги

$ sudo service docker status
$ sudo service docker start
$ sudo docker-compose up

сейчас работает docker-compose up


0

Для меня я начал модернизацию Docker и отменил на полпути. Я не заметил, что Docker не работал (если это было, есть значок в верхней навигационной панели моего Macbook, оставшийся заряд батареи, время и т. Д.). Как только я запустил его и закончил обновление, docker-compose upснова заработало!


0

В моей настройке есть два случая этой ошибки:

  • __pycache__ файлы, созданные пользователем root после того, как я запустил интеграционные тесты внутри контейнера, недоступны для docker (говорит о первоначальной проблеме) и docker-compose (неоднозначно говорит о хосте docker);
  • microk8s заблокировал мой порт, пока я не остановил его.

0

Попробуйте запустить dockerdили, sudo dockerdесли необходимо, сначала запустить демон. Если начать dockerdс sudoвы можете работать docker-compose upс sudoтакже. в противном случае это нормально.

Рабочее решение от https://github.com/docker/compose/issues/4181


0

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

выход выход

затем снова по ssh на сервер


0

Следующее сработало для меня, я не уверен, какая часть сделала трюк:

julian:project$ sudo service docker status
julian:varys$ 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 Wed 2020-07-15 01:21:16 UTC; 24min ago
     Docs: https://docs.docker.com
 Main PID: 6762 (dockerd)
    Tasks: 25
   CGroup: /system.slice/docker.service
           └─6762 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

julian:project$ export DOCKER_HOST=unix:///run/containerd/containerd.sock

julian:project$ sudo groupadd docker
groupadd: group 'docker' already exists
julian:project$ sudo gpasswd -a $USER docker
Adding user ubuntu to group docker
julian:project$ newgrp docker

julian:project$ ls -ln /var/run/ | grep docker
drwx------  5   0   0  120 Jul 15 01:10 docker
-rw-r--r--  1   0   0    4 Jul 15 01:10 docker.pid
srw-rw----  1   0 999    0 Jul 15 01:10 docker.sock

julian:project$ sudo rm /var/run/docker.sock                                                                                                                                                                                            
julian:project$ sudo rm /var/run/docker.pid

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