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

Я установил 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: .

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

Ответ 1

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

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

Ответ 2

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


UPDATE 2016-3-14: В какой-то момент процесса установки докера (или docker-compose?) есть предложение и пример, чтобы добавить ваше имя пользователя в группу "докер". Это позволяет избежать необходимости "sudo" перед всеми командами докеров, например:

~ > docker run -it ubuntu /bin/bash
[email protected]:/# date
Mon Mar 14 23:43:36 UTC 2016
[email protected]:/# exit
exit
~ > 

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

Sudo? Нет!

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

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

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

Готово!

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

Установлена ​​установка Docker .

Шаги после установки для Linux

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

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

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

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

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

# 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

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

Ответ 3

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

Ответ 4

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

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

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

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

    $ sudo groupadd docker

  • Добавьте пользователя в группу докеров.

    $ sudo usermod -aG docker $USER

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

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

    $ docker run hello-world

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

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

Ответ 5

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

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

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

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

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

sudo systemctl enable docker

Ответ 6

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

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

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

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

Ответ 7

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

Ответ 8

Ответ от @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 и это решило мою проблему.

Ответ 9

Любой зарегистрированный журнал?

В моем случае сообщение об ошибке в /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 было решением.

Ответ 10

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

Только diff, что это произошло только во время 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 it.

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

Ответ 11

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

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

Ответ 12

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

Ответ 13

$ sudo docker-compose up

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

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

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

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

Ответ 14

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

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

Ответ 15

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

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

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

решение -

sudo service docker start 

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

Ответ 16

sudo service docker start

помогает мне

Ответ 17

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

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

Ответ 18

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

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

Ответ 19

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

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

Решение будет следующим:

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

    если нет - запустите sudo service docker status или sudo systemctl start docker (зависит от некоторых версий Linux).

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

Ответ 20

Хммм, простое временное решение sudo docker-compose up.. это проблема, связанная с разрешением, вы должны добавить своего пользователя в группу докеров. https://docs.docker.com/engine/installation/linux/linux-postinstall/