Не удается подключиться к 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: .


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

785   11  

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 и добавить пользователя:

  1. создать докер группа.

    $ sudo groupadd docker

  2. добавьте пользователя в группу docker.

    $ sudo usermod -aG docker $USER

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

  4. убедитесь, что вы можете докер команды без 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 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 и вводящее в заблуждение сообщение об ошибке.

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

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

активировать среду с помощью переменной env.

Comments

    Ничего не найдено.