Я намагаюся підключитися до демона з підтримкою TLS без TLS?


221

Я намагаюся дізнатися про Докера , але я продовжую отримувати критичні (для мене) повідомлення про помилки.

Можливо, найпростішим прикладом цього є спроба надрукувати встановлену мені версію Docker:

$ sudo docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
FATA[0000] Get http:///var/run/docker.sock/v1.16/version:
    dial unix /var/run/docker.sock: no such file or directory.
    Are you trying to connect to a TLS-enabled daemon without TLS?

Я щойно переглядав керівництво користувача і точно слідую за кожним кроком, тому я здивований, що отримую це повідомлення ... Що мені робити зараз?

Я щойно помітив, що якщо я не використовую, sudoя не отримую помилки:

$ docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8

Звичайно, це не рішення, оскільки, можливо, мені доведеться використовувати sudoдесь вниз дорогу ...

Щойно я знайшов ще одну сторінку, що говорить: " Якщо ви використовуєте OS X, ви не повинні використовувати sudo". Я не знаю, чи мають на увазі вони лише той приклад, або взагалі.


38
Дурне питання, але ви запустили демон-докера?
Usman Ismail

Я дотримуюся посібника користувача, так що так, я вважаю, що демон запущений. Як я можу подвоїти перевірку?
Шон

5
Насправді ви знайшли рішення. З boot2docker вам ніколи не знадобиться sudo з linux, вам завжди буде потрібно sudo. Це тому, що boot2docker насправді виконує ті команди у віртуальному вікні, яке налаштовано для правильного доступу до демона.
Usman Ismail

1
Я боровся з цим питанням і біг без судо працював на мене
sak

6
Майже всі відповіді стосуються ОС X (вони згадуються boot2docker), хоча ОС X прямо не згадується у запитанні чи тегах. Якщо когось цікавить загальна відповідь, будь ласка, дивіться мою відповідь.
Пьотр Доброгост

Відповіді:


150

Для мене біг $(boot2docker shellinit 2> /dev/null)вирішив проблему.

Це запускає вихід boot2docker shellinitкоманди (три set -x ...рядки) у вашому поточному сеансі терміналу, що дає dockerкоманді знати, де знайти віртуальну машину boot2docker.

Додавання $(boot2docker shellinit 2> /dev/null)внизу вашого ~/.bash_profileфайлу гарантуватиме, що dockerкоманда буде налаштована кожного разу, коли ви відкриваєте свій термінал.


Для людей , що використовують молюск: boot2docker shellinit ^ /dev/null | source.


Зауважте, що 2> /dev/null(та еквівалент Риби ^ /dev/null) необов’язкові. Як @ pablo-fernandez запропонував, це приховує Writing ..лінії.


Я вже робив це, але додам його до .bash_profile, хороша ідея
Шон

напевно допомагає boot2docker 1.5, але старший boot2docker 1.2 зробив це не правильно
Макс Марков

1
Я додав більш жорстке перенаправлення, щоб не з'являлися заяви "Написання ...": $ (boot2docker shellinit 2> / dev / null)
Пабло Фернандес

3
Дякую, що згадуєте рибну шкаралупу! Вирішили проблему для мене.
кирилиця

1
Як згадується у відповіді Сальвадора Далі нижче, переконайтеся, що ви також запустите boot2docker startперед запуском оболонки init.
Кевін

78

Я отримував таку ж помилку на MacOS із судо і без неї.

Я вирішив це за допомогою:

boot2docker start
$(boot2docker shellinit)

PS: Завдяки Алану. Я з’ясував, що такий підхід рекомендується в їх офіційній документації .

PS2: Іноді boot2docker initможе знадобитися перед запуском двох команд (дякую Аарону).


Це працювало, але я не розумію, чому? що робить $ (boot2docker shellinit)?
Еміль

Це працювало в Mac OS X, але у мене те саме питання, що і у Emile, тобто чому це працювало?
Nissan

Це не спрацювало для мене на Mac OSX 10.10.4 за допомогою інструментів Docker.
b01

Мені довелося не тільки запустити boot2docker shellinit, але і скопіювати та запустити кожну з відображених команд. В офіційній документації за посиланням сказано, що ця команда відображає лише необхідний набір команд
Лебедєв Віталій,

Працював і для мене на машині Windows.
Нушад

55

У моєму випадку (Linux Mint 17) я робив різні речі, і не знаю, які з них абсолютно необхідні.

Я включив відсутні пакети Ubuntu:

$ sudo apt-get install apparmor lxc cgroup-lite

Користувача додано до групи docker:

$ sudo usermod -aG docker ${USER}

Початий демон (openSUSE просто потребує цього)

$ sudo docker -d

Спасибі \ Атрибуція


Спасибі Усману Ісмаїлу , бо, можливо, це було саме те останнє

Дурне питання, але ви запустили демон-докера? - Usman Ismail 17 грудня 14 грудня о 15:04


Дякую також github @ MichaelJCole за рішення, яке працювало на мене, тому що я не перевіряв демона, коли читав коментар Usman.

Коментар GitHub :

sudo apt-get install apparmor lxc cgroup-lite
sudo apt-get  install docker.io
# If you installed docker.io first, you'll have to start it manually
sudo docker -d
sudo docker run -i -t ubuntu /bin/bash

Завдяки публікації fredjean.net за те, що помітив відсутні пакети та забув про інструкції з встановлення Ubuntu за замовчуванням та Google про інші способи

Виявляється, пакети cgroup-lite та lxc не встановлені за замовчуванням на Linux Mint. Встановлення обох тоді дозволило мені запустити bash в базовому зображенні, а потім скласти і запустити своє зображення.


Завдяки коментарю brettof86 про openSUSE


2
Дякую! У моєму випадку (Монетний двір 17.1) саме пропажі не вистачало.
Олександр Л Теллес

2
Додавання себе до докерської групи зробило для мене те, - sudo adduser $USER docker. Трюк, щоб набути чинності на поточній оболонці, був curgroup=$(id -gn) && newgrp docker && newgrp $curgroupадаптований з сайту superuser.com/questions/272061/…
Tero Tilus

1
Я здогадуюсь, що це набагато нижчий бал - це те, що більше людей використовують ОС X, ніж Linux? Я використовую Ubuntu 14.04, і він працює для мене.
крижана вода

1
openSUSE, і мені потрібно було лише запустити демон
blockloop

Вибачте моє незнання щодо докер-машини, але я не знаю. Але якщо ви дізнаєтесь, будь ласка, вкажіть це тут у коментарях чи редагуванні відповіді. : D
ElMesa

49

Основна проблема проста - відсутність дозволу на /var/run/docker.sockUnix доменного сокета.

З Даемона Опція сокета глави з Докер командного рядка посилання для Докер 1.6.0:

За замовчуванням Unix доменного сокета (або IPC-сокета) створюється в /var/run/docker.sock, вимагаючи або root дозволу, або членства групи докер .

Кроки, необхідні для надання прав користувачам, чітко описані в інструкції з встановлення Docker для Fedora :

Надання прав користувачам на використання Docker

Інструмент командного рядка docker контактує з процесом демон докера через файл сокета, яким /var/run/docker.sockналежить root:root. Хоча рекомендується використовувати sudo для команд докер, якщо користувачі бажають цього уникати, адміністратор може створити групу докерів, мати її власноруч /var/run/docker.sockта додати користувачів до цієї групи.

$ sudo groupadd docker
$ sudo chown root:docker /var/run/docker.sock
$ sudo usermod -a -G docker $USERNAME

Вийдіть із системи та увійдіть в систему, щоб вказані вище зміни вступили в силу. Зверніть увагу, що пакети Docker деяких дистрибутивів Linux (Ubuntu) вже розміщуються /var/run/docker.sockв dockerгрупі, роблячи перші два вищезазначених кроки непотрібними.

У разі ОС X і boot2dockerситуація інша; демон Docker працює всередині VM, тому DOCKER_HOSTзмінна середовища повинна бути встановлена ​​на цю VM, щоб клієнт Docker міг знайти демона Docker. Це робиться бігом $(boot2docker shellinit)в оболонці.


1
Хм, моя ситуація схожа, але тонко інша. Я бігаю на Ubuntu 14.04. Докер, здавалося б, встановлений правильно (введення просто "докер" відображає список команд). Я створив групу докерів і зробив свого користувача його членом. Це просто домашня система, і я просто граю з докером. Однак все, крім простого "докера", викликає помилку. Я вважаю, тому що докер не може створити /var/run/docker.sock. У моїй системі / var / run є символьне посилання на / run, що є root: root та 755 perm, тому докер не може там писати. Не впевнений, яким би було моє рішення для цього.
Стів Коен

Пьотре, це пояснення дуже корисне. Каньє докладно розповідає, чому "$ (boot2docker shellinit)" працює, але звичайний "boot2docker shellinit" не робить? Я розумію, що дужки мають на увазі виконання в підзарядці, але я не зміг розгадати, чому це потрібно, щоб докер працював належним чином, коли жодна з інших команд цього не вимагає ....
Алекс Едельштайн

@AlexEdelstein Різниця між boot2docker shellinitіншими командами полягає в тому, що ця команда сама не вносить жодних змін, а лише генерує (друкує) команди, які потрібно запустити самостійно. Ви можете запустити boot2docker shellinitспочатку, а потім вручну скопіювати та запустити кожну команду зі свого результату. Простіше запускати всі команди, виконуючи boot2docker shellinitпідпроцес (із $()синтаксисом), оскільки таким чином кожен рядок виводу автоматично запускається як команда оболонки. Дивіться docs.docker.com/installation/mac/#from-your-command-line, де це детально показано.
Пьотр Доброгост

@SteveCohen Ви можете перевірити, чи працює служба докера sudo service docker status. У моєму Ubuntu 14.04 він не працював після встановлення, що спричинило помилку.
razz0

1
Дякуємо, що зв’язали фактичну документацію з першопричиною, вирішили мою проблему
RonaldFindling

23

Переконайтеся, що працює демон Docker:

service docker start

Це зафіксувало це для мене!


sudo service docker startдля мене
Міліметричний

systemctl enable docker.serviceта systemctl start docker.service для користувачів system.d linux (Арка в моєму випадку)
PRDeving

sudo service docker restartдля мене
Заморожене полум'я

15
  1. Docker називає себе самодостатнім часом виконання контейнерів Linux. Простіше кажучи, він виступає як сервер, так і клієнт.
  2. $ docker versionЗапит команди є внутрішнім для виконуваного файлу Docker і не працюючий демон / служби.
  3. $ docker images or $ docker ps or $ docker pull centos - це команди, які надсилають запити до демон-докеру / службі, що працює.
  4. Docker за замовчуванням підтримує TLS-з'єднання з його демон / службою.
  5. Тільки якщо той користувач, у якого ви ввійшли в систему як частина групи користувачів, dockerабо ви використовували sudoперед командою, наприклад $ sudo docker images, для нього не потрібно підключення TLS.

Відвідайте сторінку документації Docker Захистіть гніздо демона Docker .

Прокрутіть трохи до верху і знайдіть warning sectionдля наочності.


1
Популярні відповіді поки що стосуються лише OS X, тоді як ця набагато більш загальна, пояснює причину і дозволила мені вирішити її в GNU / Linux.
sinisterstuf

1
@laffuste ваша команда дозволить ДОПОМОГУВАТИ ГРУПИ КОРИСТУВАЧА. через зниклий "-а"
Pawel Barcik

3
@PawelBarcik жахлива помилка, дякую:sudo usermod -a -G docker {username}
laffuste

1
Як ця відповідь відповідає на питання? У чому причина помилки? Як це виправити? (Я не в ОС X, тому існуючі відповіді не застосовуються).
Пьотр Доброгост

13

Вам потрібно буде зробити:

$boot2docker init
$boot2docker start

Наступні налаштування вирішили проблему:

$export DOCKER_HOST=tcp://192.168.59.103:2376
$export DOCKER_CERT_PATH=/Users/{profileName}/.boot2docker/certs/boot2docker-vm
$export DOCKER_TLS_VERIFY=1

1
Ця команда також може бути використана для встановлення змінних середовища (а не робити це вручну):eval "$(boot2docker shellinit)"
Повноваження

11

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

sudo gpasswd -a user docker

але ще не вийшов.

Щоб вирішити це, ви можете або повторно увійти в систему, або використати sg docker "docker <subcommand> ..."перед виходом у систему.

Якщо ви в групі docker дюйма /etc/group, ви повинні бути в змозі запустити його без введення пароля.

https://dingyichen.wordpress.com/2015/02/05/docker-dial-unix-varrundocker-sock-no-such-file-or-directory-are-you-trying-to-connect-to-a- tls-включено-демон-без-tls /


7

У Ubuntu після встановлення lxc-docker потрібно додати свого користувача до групи користувачів docker :

sudo usermod -a -G docker myusername

Це пов’язано з дозволами на файл сокет:

srw-rw---- 1 root docker 0 Mar 20 07:43 /var/run/docker.sock

НЕ РУБИТИ usermod БЕЗ "-a", як було запропоновано в одному з інших коментарів, або це видалить ваші додаткові налаштування груп і просто залишить групу "докер"

Ось що буде:

➜  ~  id pawel
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare),998(docker)
➜  ~  usermod -G docker pawel
➜  ~  id pawel               
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),998(docker)

6

TLDR : Це отримало мою групу зустрічей Python минулу цю проблему, коли я працював у клініці з встановлення докера, і більшість користувачів були на OS X:

boot2docker init
boot2docker up

виконайте exportкоманди, які дає вам результат

docker info

повинен сказати вам, що це працює.


Контекст (що спричинило нас до проблеми)

Я керував клінікою з встановлення докера, і у більшості відвідувачів була OS X, і ми зіткнулися з цією проблемою, і я подолав її на кількох машинах. Ось наступні кроки:

По-перше, ми встановили домашню мову (так, деякі відвідувачі цього не мали):

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Тоді ми отримали cask, який ми використовували для встановлення virtualbox, а потім використовували brew для установки docker та boot2docker (все, що потрібно для OS X). Не використовуйте sudo для заварювання. :

brew install caskroom/cask/brew-cask
brew cask install virtualbox
brew install docker
brew install boot2docker

Рішення

Це було тоді, коли ми зіткнулися з проблемою, яку тут поставив запитувач. Нижче виправлено це. Наскільки я розумію, це initбула разова угода, але, ймовірно, доведеться запускати upкожного разу, коли ви починаєте докер:

boot2docker init
boot2docker up

Потім після upзапуску він дає кілька exportкоманд. Скопіюйте та вставте їх.

Нарешті, docker infoслід сказати, що він правильно встановлений.

Для демонстрації

Решта команд повинні демонструвати це. (для Ubuntu linux мені потрібно sudo.)

docker run hello-world
docker run -it ubuntu bash

Тоді ви повинні бути на кореневій оболонці в контейнері:

apt-get install nano
exit

Повернутися до рідного користувача bash:

docker ps -l

Шукайте приблизно 12-значний шістнадцятковий ідентифікатор (0-9 або af) у розділі "Ідентифікатор контейнера", наприклад 456789abcdef. Потім ви можете скористатись своєю зміною і назвати її деяким описовим іменем, наприклад descriptivename:

docker commit 456789abcdef descriptivename`

5

Все, що потрібно для запуску Docker в Linux Ubuntu / Mint:

sudo apt-get -y install lxc
sudo gpasswd -a ${USER} docker
newgrp docker
sudo service docker restart

За бажанням вам може знадобитися встановити дві додаткові залежності, якщо вищезазначене не працює:

sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart

1
Я б дав собі +1, якби це було можливо - я шукав рішення і знайшов власне рішення, про яке забув :)
tomrozb

Це мені допомогло. Я зрозумів, що служба докера не працює після встановлення, тому sudo service docker startвирішив проблему на моєму Ubuntu 14.04.
razz0

3

Я спробував рішення тут, і boot2docker не працював.

Моє рішення: Видаліть boot2docker на Mac, встановіть Centos 7 VM у VirtualBox та працюйте з Docker всередині цієї VM.


3

Для мене працювали наступні кроки:

  1. Я помітив, що біг docker run hello-worldне вдається з цією затягнутою помилкою, як у питанні, але біг sudo docker run hello-worldпрацював.
  2. Я додав мій поточний користувач в dockerгрупу sudo adduser user docker. Потім потрібно перезапустити машину або використати su - user(перевірити за допомогою groupsкоманди, якщо є в dockerгрупі).

Після цього hello-worldпочав працювати.

Моя відповідь заснована на тому, як я можу використовувати докер без судо? що пояснює, що піде не так.



Після додавання самості в групу, зробіть `newgrp docker; newgrp Primary-group, це створює підрозділ, з новою первинною групою docker, після чого знову встановлює правильну первинну групу. (Трохи хак).
ctrl-alt-delor

2

Для чого це варто, я спробував усі рішення в цьому питанні, і в цьому пов'язаному питанні, і жодне не вирішило мою проблему, поки я не видалив і не встановив знову VirtualBox . Цей процес оновив VirtualBox з версії 4.2.16 до 4.3.22 (попередня моя лежала не використовуваною в системі протягом декількох місяців).

Тоді boot2dockerі dockerпрацювали без будь-яких інших коригувань.



2

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

sudo groupadd docker
sudo usermod -aG docker $USER

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

docker run hello-world

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


1

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



0

Я зіткнувся з тією ж проблемою, коли я створював зображення від Докера з Дженкінса. Просто додайте користувача до dockerгрупи, а потім перезавантажте служби Docker, і в моєму випадку мені довелося перезапустити служби Jenkins.

Це була помилка, яку я отримав:

http:///var/run/docker.sock/v1.19/build?cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&memory=0&memswap=0&rm=1&t=59aec062a8dd8b579ee1b61b299e1d9d340a1340: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
FATAL: Failed to build docker image from project Dockerfile
java.lang.RuntimeException: Failed to build docker image from project Dockerfile

Solution:

[root@Jenkins ssh]# groupadd docker
[root@Jenkins ssh]# gpasswd -a jenkins docker
Adding user jenkins to group docker
[root@Jenkins ssh]# /etc/init.d/docker restart
Stopping docker:                                           [  OK  ]
Starting docker:                                           [  OK  ]
[root@Jenkins ssh]# /etc/init.d/jenkins restart
Shutting down Jenkins                                      [  OK  ]
Starting Jenkins                                           [  OK  ]
[root@Jenkins ssh]#

-1

Іншою можливою причиною є те, що візуалізація процесора BIOS не ввімкнена. Перейдіть і ввімкніть це першим!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.