Не удается подключиться к докеру из докерера
Я установил 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 - это работает?
Решение будет следующим:
Сначала попробуйте убедиться, что Docker Service запущен и работает, как и ожидалось, на вашем удаленном/локальном компьютере: sudo service docker status
если нет - запустите sudo service docker status
или sudo systemctl start docker
(зависит от некоторых версий Linux).
Во-вторых, запустите докер как sudo sudo docker-compose up
Ответ 20
Хммм, простое временное решение
sudo docker-compose up.. это проблема, связанная с разрешением, вы должны добавить своего пользователя в группу докеров.
https://docs.docker.com/engine/installation/linux/linux-postinstall/