Не удается подключиться к docker из docker-compose
Я установил docker-machine 0.1.0 и docker-compose 1.1.0 на Mac OS 10.8.5.
Docker-machine работает нормально и может подключаться по ssh docker-machine.
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev * virtualbox Running tcp://192.168.99.100:2376
однако не удается подключиться из docker-compose.
$ docker-compose up
Couldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
мой Dockerfile и docker-compose.YML-это здесь.
Dockerfile
FROM centos:centos7
DOCKER_HOST tcp://192.168.99.100:2376
docker-compose.в формате YML
web:
build: .
Почему не могу подключиться? Есть идеи?
11 ответов:
настройки машины. Но вам нужно экспортировать некоторую среду для подключения к машине Docker. По умолчанию
dockerклиент CLI пытается связаться с демоном с помощьюhttp+unix://var/run/docker.sock(как показано в сообщении об ошибке).экспортируйте правильные переменные среды с помощью
eval $(docker-machine env dev)и повторите попытку. Вы также можете просто запуститьdocker-machine env devчтобы увидеть переменные среды, которые он будет экспортировать. Обратите внимание, что один из них -DOCKER_HOST, просто как сообщение об ошибке может потребоваться набор.
простое решение для меня:
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, так и 2nd install for docker-compose), и вы найдете необходимый шаг. Также документально здесь: https://subosito.com/posts/docker-tips/
судо? Нет!
устали от ввода sudo docker каждый раз, когда вы выдаете команду? Да, там это способ справиться с этим. Хотя, естественно, докер требует пользователь root, мы можем дать корневую эквивалентную группу для операций docker.
вы можете создать группу под названием docker, а затем добавить в нее нужного пользователя группа. После перезапуска докера обслуживание, пользователю не нужно будет вводить судо каждый раз делают докерские операции. Как это выглядит на оболочке команды? как корень, здесь вы идете:
> sudo groupadd docker > sudo gpasswd -a username docker > sudo service docker restartготово!
обновление 2017-3-9
установка Докер инструкции были обновлены здесь.
шаги после установки для Linux
этот раздел содержит дополнительные процедуры для настройки хостов Linux для лучшей работы с ними Докер.
управление настройки как не-root пользователь!--16-->
демон docker привязывается к сокету Unix вместо TCP-порта. По умолчанию этот сокет Unix принадлежит корню пользователя, и другие пользователи могут получить к нему доступ только с помощью 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эта команда загружает тестовый образ и запускает его в контейнер. Когда контейнер работает, он печатает информационное сообщение и завершает работу.
по умолчанию демон docker всегда работает как пользователь root, поэтому вам нужно добавить
sudoк вашей команде Докера.если вы не хотите использовать sudo при использовании команды docker, создайте группу Unix под названием docker и добавьте в нее пользователей. Когда демон docker запускается,он делает владение сокетом Unix доступным для чтения / записи группой docker.
чтобы создать группу docker и добавить пользователя:
создать докер группа.
$ sudo groupadd dockerдобавьте пользователя в группу docker.
$ sudo usermod -aG docker $USERвыйдите из системы и войдите обратно, чтобы ваше членство в группе было переоценено.
убедитесь, что вы можете докер команды без sudo.
$ docker run hello-worldэта команда загружает тестовый образ и запускает его в контейнер. Когда контейнер запускается, он печатает информационное сообщение и выходы.
шаги, описанные выше, исходят из официальная документация Докера.
Если вы находитесь на Linux, вы не можете иметь
docker-machineустановлен, так как он установлен только по умолчанию на компьютерах Windows и Mac.Если это так, вам нужно будет добраться до: https://docs.docker.com/machine/install-machine/ чтобы найти инструкции по его установке на вашей версии Linux.
после установки, выполните
docker-compose upпрежде чем пытаться что-либо перечисленных выше.надеюсь, это кому-то поможет. Это сработало для моей установки devilbox в Федора 25.
Если вы начали докер с помощью
sudo, то вы должны запустить docker-compose up сsudoНапример:sudo docker-compose up
sudo systemctl start docker- чтобы запустить службу Docker.
sudo docker-compose upпосле этого.У меня есть Fedora 26, и пытаясь решить ту же проблему, которую я в конечном итоге ввел Docker Compose на странице разработчиков Fedora а то Docker на странице разработчиков Fedora, который помог мне.
наверное, сервис docker рассматривался сообществом, чтобы начать с системы и работать в фоновом режиме все время, но для меня это было не так очевидно, и в этом причина Я могу подумать, почему нет такого популярного ответа, как этот.
на страница разработчиков Fedora есть инструкция, Как включить Докер, чтобы начать с системой:
sudo systemctl enable docker
кто-нибудь проверил журнал ?
В моем случае сообщение об ошибке в
/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было решение.
у меня были те же симптомы.
только разница, что это произошло только в
docker-compose builddocker 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и вводящее в заблуждение сообщение об ошибке.
ответ от @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когда другой владелец файлов - мой пользователь. Когда я пытался построитьnginxCouldn't connect to Docker daemon at http+docker://localunixsocket - is it running?добавил
./docker-runtimeдо.dockerignoreи это решило мою проблему.
Если вы используете docker-machine, то вы должны активировать среду с помощью env переменной. если вы не используете docker-machine, то запустите свои команды с помощью sudo
Comments