Не вдається підключитися до docker від docker-compose


163

Я встановив docker-machine 0.1.0 і docker-compose 1.1.0 на Mac OS 10.8.5.
Докер-машина працює нормально і може підключитися за допомогою docker-machine 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 тут.

Докерфайл

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

docker-compose.yml

web:
  build: .

Чому не можна підключитися? Будь-які ідеї?


49
Запускається docker-machineяк корінь? Я щойно прийшов сюди з тією ж проблемою на Ubuntu, і саме дозволи на сокет - sudoзробили трюк.
SLD

7
Для тих, хто працює в Linux, можливо, вам просто потрібно буде додати до групи докерів .
Батандва

5
просто запустіть: sudo docker-compose up
Гіріш Гупта

У мене було те саме питання. Вам потрібно перезапустити докер. sudo service docker restartабо sudo service docker startя вирішив це з цим.
О.М. Бхаратія

Для тих, хто використовує Ubuntu, ви повинні використовувати sudo, і ви не повинні додавати користувачів до докерної групи . Переглянути коментарі у прийнятій відповіді: askubuntu.com/questions/477551/…
kas

Відповіді:


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)") у свій контейнер для поштових відправ (postctivate), щоб забезпечити її завжди оновлення.
Даннід

1
Де я можу знайти скриньку файлів / поставити активацію?
Лукаш Шульце

Або ви забули встановити docker: $ 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-compose?) Є пропозиція та приклад додати своє ім’я користувача до групи "docker". Це дозволяє уникнути необхідності "sudo" перед усіма командами докера, наприклад:

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

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

Судо? Немає!

Набридло вводити докер-судо кожного разу, коли ви видаєте команду? Так, є спосіб вирішити це. Хоча природно докер вимагає користувача root, ми можемо надати групу-еквівалентну групу для операцій докера.

Ви можете створити групу під назвою докер, а потім додати до неї потрібного користувача. Після перезапуску послуги докера користувачеві не потрібно буде вводити sudo щоразу, коли робити докерські операції. Як це виглядає на командах оболонки? як корінь, ось тут:

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

Готово!

ОНОВЛЕННЯ 2017-3-9

Тут оновлено інструкції щодо встановлення Docker .

Крок після встановлення для Linux

Цей розділ містить необов'язкові процедури налаштування хостів Linux для кращої роботи з Docker.

Керуйте Docker як некористувацький користувач

Демон докера прив'язується до сокета Unix замість порту TCP. За замовчуванням Unix-сокет належить користувачу root, а інші користувачі можуть отримати доступ до нього лише за допомогою sudo. Демон докера завжди працює як користувач root.

Якщо ви не хочете використовувати sudo під час використання команди docker, створіть групу Unix під назвою 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

Ця команда завантажує тестове зображення і запускає його в контейнер. Коли контейнер працює, він друкує інформаційне повідомлення і виходить.


1
Так само чомусь судо є єдиним способом змусити його працювати: O: O: O
Джеймі Хатбер

12
Замість виходу з системи ви можете скористатися командою:newgrp docker
Thiago Falcao

Ahh детальна відповідь з підпитом :-)
Sukumaar

1
Re: "Просте рішення для мене: sudo docker-compose up". Коли я спробую це, я отримую:sudo: docker-compose: command not found
mblakesley

38

Якщо ви почали використовувати докер sudo, ви повинні запустити докер-композицію з sudo Like:sudo docker-compose up


Це працювало для мене, коли я бігав sudo docker-compose buildзамість docker-compose build.
anms_pro

26

За замовчуванням демон докера завжди працює як користувач root, тому вам потрібно додати sudoдо своїх команд Docker.

Якщо ви не хочете використовувати sudo під час використання команди docker, створіть групу Unix під назвою docker і додайте до неї користувачів. Коли запускається демон докера, він робить право власності на сокет Unix читати / записувати групою докер.

Щоб створити групу докерів та додати свого користувача:

  1. Створіть групу докерів.

    $ sudo groupadd docker

  2. Додайте свого користувача до групи докерів.

    $ sudo usermod -aG docker $USER

  3. Вийдіть із системи та увійдіть назад, щоб повторно оцінити належність до вашої групи.

  4. Переконайтеся, що ви можете виконувати команди докер без sudo.

    $ docker run hello-world

Ця команда завантажує тестове зображення і запускає його в контейнер. Коли контейнер працює, він друкує інформаційне повідомлення і виходить.

Наведені вище кроки походять з офіційної документації Docker .


Як ми можемо це зробити на Windows, встановленому Docker?
Джефф Кук

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

groupчленство можна su - $USER
оновити,

19

Коли ви отримуєте помилку :

ПОМИЛКА: Не вдалося підключитися до демона Docker за адресою http + docker: // localhost - чи працює він?

Рішення буде:

  1. По-перше, спробуйте перевірити, чи служба Докер працює та працює, як очікувалося на вашому віддаленому / локальному апараті:sudo service docker status

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

  2. По-друге, почніть докер як судо sudo docker-compose up


16

sudo systemctl start docker - запустити послугу Docker.

sudo docker-compose up після того.

У мене є Fedora 26, і намагаючись вирішити ту саму проблему, я врешті-решт зайшов у Docker Compose на сторінці розробників Fedora, а потім Docker на сторінці розробників Fedora , що мені допомогло.

Можливо, сервіс docker вважав спільноту починати із системи та постійно працювати у фоновому режимі, але для мене це було не так очевидно, і саме тому я можу подумати, чому немає такої популярної відповіді, як ця.

На сторінці розробників 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

Крім додавання користувачів до групі докерів, щоб уникнути 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, який був розміщений в томі Докера. chown/ chmodвиправлено. Страшне повідомлення про помилку, але вони над ним працюють. Дивіться github.com/docker/compose/isissue/5318
bcattle

2

$ sudo docker-скласти

Я дотримувався кроків, як зазначено у наведеній вище відповіді, щоб додати $ USER до групового докера. я не хотів додавати новий груповий докер, тому що в моїй установці докер автоматично створювалася група з ім'ям docker.

Docker CE встановлений і працює. Група докерів створена, але до неї не додаються користувачі. Для запуску команд Docker потрібно використовувати sudo. Перейдіть до післяінсталяції Linux, щоб дозволити непривілейованим користувачам виконувати команди Docker та інші необов'язкові кроки налаштування.

але використання docker-compose також не працювало. Це дало таку саму попередню помилку. Тож у моєму випадку (Ubuntu 18.10) судо докер-композиція виправила проблему.

ps: @Дякую спасибі за пораду.


1
Можливо, краще поставити рішення спочатку, а ті, що пояснюють його нижче. Також ви можете скористатися цими кнопками в редакторі, щоб краще відформатувати свою відповідь.
Тів

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

тепер докер-композиція працює


0

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


0

У моїй установці є дві випадки цієї помилки:

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


0

вихід із системи, потім знову допомогли мені. У моєму випадку це було свіжого встановлення, я створив нового користувача, нову групу, потім додав користувача до докерної групи.

вихід з виходу

потім знову 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.