TLS etkin olmayan TLS etkin bir arka plan programına bağlanmaya çalışıyorum


221

Docker hakkında bilgi edinmeye çalışıyorum , ama (bana) şifreli hata mesajları alıyorum.

Muhtemelen bunun en basit örneği, yüklediğim Docker sürümünü yazdırmaya çalışıyor:

$ 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?

Ben sadece kullanım kılavuzu üzerinden geçiyor ve her adımı tam olarak takip ediyorum, bu yüzden bu mesajı aldığım için şaşırdım ... Şimdi ne yapmalıyım?

Ben sadece ben kullanmazsanız sudohata alamadım fark ettim :

$ 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

Tabii ki, bu bir çözüm değil sudoçünkü yolda bir yerde kullanmam gerekebilir ...

Sadece buldum başka bir sayfa söyleyerek " Eğer OS X kullanıyorsanız o zaman kullanmamalısınız sudo." Sadece bu örnek için mi yoksa genel olarak mı anlama geldiğini bilmiyorum.


38
Aptalca bir soru ama docker arka plan programına başladın mı?
Usman Ismail

Ben kullanıcı kılavuzunu takip ediyorum, bu yüzden evet docker daemon başlatıldı inanıyorum. Nasıl tekrar kontrol edebilirim?
Shawn

5
Aslında çözümü buldun. Boot2docker ile linux ile sudo'ya asla ihtiyacınız olmayacak. Bunun nedeni, boot2docker'ın aslında bu komutları arka plan programına doğru şekilde erişmek için ayarlanmış sanal bir kutuda çalıştırmasıdır.
Usman Ismail

1
Bu sorunla mücadele ediyordum ve sudo olmadan koşmak benim için çalıştı
sak

6
Hemen hemen tüm cevaplar OS X'e özgüdür (bahsetmektedirler boot2docker), ancak OS X soru veya etiketlerde açıkça belirtilmemiştir. Eğer birisi genel cevapla ilgileniyorsa lütfen cevabımı görün.
Piotr Dobrogost

Yanıtlar:


150

Benim için koşmak $(boot2docker shellinit 2> /dev/null)sorunu düzeltti.

Bu , geçerli terminal oturumunuzda boot2docker shellinitkomutun (üç set -x ...satır) çıktısını çalıştırır , bu da dockerkomutun boot2docker sanal makinesini nerede bulacağını bilmesini sağlar .

Dosyanızın $(boot2docker shellinit 2> /dev/null)altına eklemek , terminalinizi her açışınızda komutun yapılandırıldığından ~/.bash_profileemin olur docker.


Balık kabuğu kullanan kişiler için: boot2docker shellinit ^ /dev/null | source.


Not olduğunu 2> /dev/null(ve Balık eşdeğer ^ /dev/null) isteğe bağlıdır. @ Pablo-fernandez'un önerdiği gibi, bu Writing ..çizgileri gizler .


Bunu zaten yapmıştım, ama bunu .bash_profile, iyi bir fikir olarak ekleyeceğim
Shawn

kesinlikle boot2docker 1.5 ile yardımcı olur, ancak eski bir boot2docker 1.2 doğru yapmadı
Max Markov

1
"Writting ..." ifadeleri görünmemesi için bir stderr yönlendirmesi ekledim: $ (boot2docker shellinit 2> / dev / null)
Pablo Fernandez

3
Balık kabuğundan bahsettiğiniz için teşekkür ederiz! Sorunu benim için çözdü.
cyrillk

1
Aşağıdaki Salvador Dali'nin cevabında belirtildiği gibi, boot2docker startkabuk initini çalıştırmadan önce de koştuğunuzdan emin olun .
Kevin

78

Aynı hatayı Macudo ile sudo ve onsuz alıyordum.

Ben çözdüm:

boot2docker start
$(boot2docker shellinit)

PS: Alan'a teşekkürler. Bu yaklaşımın resmi belgelerinde önerildiğini öğrendim .

PS2: Bazen boot2docker initiki komut çalıştırmadan önce gerekebilir (teşekkürler Aaron).


Bu çalıştı, ama nedenini anlamıyorum? $ (boot2docker shellinit) ne yapıyor?
Emile

Bu Mac OS X'te çalıştı, ancak Emile ile aynı sorum var, yani bu neden işe yaradı?
Nissan

Bu, Docker Tools ile Mac OSX 10.10.4'te benim için çalışmadı.
b01

Ben sadece boot2docker shellinit çalıştırmak zorunda kaldım, aynı zamanda görüntülenen komutların her birini kopyalayıp çalıştırın. Bağlantıya ait resmi belgeler, bu komutun yalnızca gerekli komut kümesini görüntülediğini söylüyor
Vitaliy Lebedev

Benim için de bir windows makinesinde çalıştı.
Noushad

55

Benim durumumda (Linux Mint 17) çeşitli şeyler yaptım ve hangilerinin tamamen gerekli olduğundan emin değilim.

Eksik Ubuntu paketlerini dahil ettim:

$ sudo apt-get install apparmor lxc cgroup-lite

Gruba bir kullanıcı eklendi docker:

$ sudo usermod -aG docker ${USER}

Başlatılan arka plan programı (openSUSE'in buna ihtiyacı var)

$ sudo docker -d

Thanks \ Atıf


Teşekkürler Usman Ismail , çünkü belki de sadece son şeydi ...

Aptalca bir soru ama docker arka plan programına başladın mı? - Usman Ismail 17 Aralık 14, 15:04


Benim için çalışan çözüm için github @ MichaelJCole'a da teşekkürler , çünkü Usman'ın yorumunu okuduğumda daemon'u kontrol etmedim.

GitHub yorumu :

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

Eksik paketleri fark ettiğiniz için fredjean.net gönderiye teşekkürler ve varsayılan Ubuntu kurulum talimatlarını ve diğer yollarla ilgili google'ı unutun

Linux Mint üzerinde cgroup-lite ve lxc paketlerinin varsayılan olarak yüklü olmadığı ortaya çıkıyor. Her ikisini de yüklediğimde bash'ı temel görüntüde çalıştırmama izin verdikten sonra görüntümü oluşturup çalıştırdım.


Brettof86 adlı kullanıcının openSUSE hakkındaki yorumu sayesinde


2
Teşekkürler! Benim durumumda (Mint 17.1) eksik olan barizdi.
Alexandre L Telles

2
Docker grubuna kendimi eklemek benim için bir şey yaptı sudo adduser $USER docker. Mevcut kabuk üzerinde etkili olması için hile curgroup=$(id -gn) && newgrp docker && newgrp $curgroup, superuser.com/questions/272061/…
Tero Tilus

1
Sanırım bunun çok daha düşük bir puanı var, çünkü Linux'tan daha fazla insan OS X kullanıyor. Ubuntu 14.04 kullanıyorum ve benim için çalışıyor.
icedwater

1
openSUSE ve ben sadece cini başlatmak için gerekli
blockloop

Liman işçisi makine hakkındaki cehaletimi affedin, ama bilmiyorum. Ancak, lütfen yorumlarda veya cevabı düzenlerken burada belirtin. : D
ElMesa

49

Altı çizili sorun basittir - /var/run/docker.socketki alanı soketini unix için izin eksikliği .

Gönderen Daemon yuva seçeneği bölüm arasında Docker Komut Satırı Docker 1.6.0 için referans:

Varsayılan olarak, bir Unix soket (veya IPC soket) oluşturulur /var/run/docker.sock, kök izni veya liman işçisi grup üyeliği gerektiren düzeyde .

Kullanıcılara hak vermek için gerekli adımlar Fedora için Docker kurulum talimatlarında güzel bir şekilde açıklanmıştır :

Kullanıcılara Docker'ı kullanma hakları verme

Docker komut satırı aracı, /var/run/docker.sockait olduğu bir soket dosyası aracılığıyla docker daemon işlemine bağlanır root:root. Docker komutları için sudo kullanılması önerilir, ancak kullanıcılar bundan kaçınmak isterse, bir yönetici bir docker grubu oluşturabilir, kendi grubuna sahip olabilir /var/run/docker.sockve bu gruba kullanıcılar ekleyebilir.

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

Yukarıdaki değişikliklerin geçerli olması için oturumu kapatın ve tekrar oturum açın. Not bazı Linux dağıtımları (Ubuntu) ait Docker paketleri zaten yerleştirmek Lütfen bu /var/run/docker.sockiçinde dockergereksiz adımlardan yukarıdaki ilk iki alıcı gruba.

OS X ve boot2dockerdurum farklıysa; Docker arka plan programı bir VM içinde çalışır, DOCKER_HOSTböylece Docker istemcisinin Docker arka plan programını bulabilmesi için ortam değişkeninin bu VM'ye ayarlanması gerekir. Bu $(boot2docker shellinit)kabukta koşarak yapılır .


1
Hmm, durumum benzer ama kurnazca farklı. Ubuntu 14.04 üzerinde çalışıyorum. Docker görünüşte doğru kurulmuş (sadece "docker" girilmesi komutların listesini getirir). Bir liman işçisi grubu oluşturdum ve kullanıcıma üye oldum. Bu sadece bir ev sistemi ve ben sadece docker ile oynuyorum. Ancak "docker" dışında herhangi bir şey hatayı getirir. Docker /var/run/docker.sock oluşturamadığından inanıyorum. Sistemimde / var / run, root: root ve 755 perm olan bir symlink'tir, böylece docker orada yazamaz. Buna benim çözümümün ne olacağından emin değilim.
Steve Cohen

Piotr, bu açıklama çok faydalı. Canyou neden "$ (boot2docker shellinit)" çalışır, ancak düz "boot2docker shellinit" çalışmıyor? Parantezlerin bir alt kabukta yürütme anlamına geldiğini anlıyorum, ancak diğer komutların hiçbiri gerektirmediğinde docker'ın düzgün çalışmasını sağlamak için neden gerekli olduğunu anlayamadım ....
Alex Edelstein

@AlexEdelstein boot2docker shellinitve diğer komutlar arasındaki fark , bu komutun kendisinde herhangi bir değişiklik yapmaması, yalnızca kendiniz çalıştırmanız gereken komutları (yazdırır) oluşturmasıdır. Önce boot2docker shellinither komutu çalıştırabilir ve ardından her komutu çıktısından elle kopyalayıp çalıştırabilirsiniz. boot2docker shellinitBir alt işlemde ( $()sözdizimi ile) çalışarak tüm komutları çalıştırmak daha kolaydır, çünkü bu şekilde her çıktı satırı otomatik olarak bir kabuk komutu olarak çalıştırılır. Bunun ayrıntılı olarak gösterildiği docs.docker.com/installation/mac/#from-your-command-line adresine bakın .
Piotr Dobrogost

@SteveCohen Docker hizmetinin çalışıp çalışmadığını kontrol etmek isteyebilirsiniz sudo service docker status. Ubuntu 14.04'ümde, hataya neden olan kurulumdan sonra çalışmıyor.
razz0

1
Teşekkür kök neden gerçek belgelere bağlamak için, sorunumu çözdü
RonaldFindling

23

Docker arka plan programının çalıştığından emin olun:

service docker start

Bu benim için sorunumu çözdü!


sudo service docker startbenim için
Milimetrik

systemctl enable docker.serviceve systemctl start docker.service system.d linux kullanıcıları için (benim durumumda Arch)
PRDeving

sudo service docker restartbenim için
Donmuş Alev

15
  1. Docker, Linux kapsayıcıları için kendine yeterli bir çalışma zamanı olarak adlandırır. Basit bir ifadeyle, hem sunucu hem de istemci görevi görür.
  2. $ docker versionKomut sorgu Docker yürütülebilir değil cini / hizmet çalışan iç olduğunu.
  3. $ docker images or $ docker ps or $ docker pull centos çalışan docker arka plan programına / hizmetine sorgu gönderen komutlardır.
  4. Docker varsayılan olarak arka plana / hizmetine TLS bağlantılarını destekler.
  5. Yalnızca oturum açtığınız kullanıcı kullanıcı grubunun bir parçasıysa dockerveya sudokomuttan önce kullandıysanız , örneğin $ sudo docker imagesTLS bağlantısı gerektirmez.

Docker belge sayfasını ziyaret edin Docker arka plan programı yuvasını koruyun .

Biraz yukarı doğru ilerleyin ve warning sectionnetlik bulun .


1
Şimdiye kadar popüler cevaplar sadece OS X için geçerliyken, bu çok daha genel, sebebini açıklıyor ve GNU / Linux'ta çözüme kavuşturmamı sağladı.
sinisterstuf

1
@laffuste komutunuz KULLANICI EK GRUPLARINI SİLECEKTİR. eksik "-a" yüzünden
Pawel Barcik

3
@PawelBarcik korkunç hata, teşekkürler:sudo usermod -a -G docker {username}
laffuste

1
Bu nasıl cevap soruyu cevaplıyor? Hatanın nedeni nedir? Nasıl düzeltebilirim? (OS X'te değilim, bu yüzden mevcut cevaplar geçerli değil).
Piotr Dobrogost

13

Yapmanız gerekenler:

$boot2docker init
$boot2docker start

Aşağıdaki ayarlar sorunu çözdü:

$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
Bu komut ayrıca çevre değişkenleri ayarlayın (ziyade elle yapıyor) için kullanılabilir:eval "$(boot2docker shellinit)"
Powers

11

Henüz dosya izniniz olmayabilir. Kendimi kullanarak dockergruba ekledikten sonra başıma geldi

sudo gpasswd -a user docker

ancak henüz çıkış yapmadı.

Bu sorunu çözmek için, yeniden giriş yapabilir veya sg docker "docker <subcommand> ..."oturumu kapatmadan önce kullanabilirsiniz .

Eğer grup iseniz docker in /etc/group, sen yazarak şifre olmadan çalıştırmak mümkün olmalıdır.

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 özellikli-cin-olmadan-tls'de /


7

Ubuntu'da, lxc-docker'ı kurduktan sonra , kullanıcıyı docker kullanıcı grubuna eklemeniz gerekir :

sudo usermod -a -G docker myusername

Bunun nedeni soket dosyası izinlerinden kaynaklanmaktadır:

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

Diğer yorumlardan birinde önerildiği gibi "-a" OLMADAN usermod'u ÇALIŞTIRMAYIN yoksa ek grup ayarlarınızı siler ve "docker" grubundan çıkar

Bu olacak:

➜  ~  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 : Bu, liman işçisi yükleme konusunda bir klinik çalıştırırken Python buluşma grubumu bu sorunu aştı ve çoğu kullanıcı OS X'te idi:

boot2docker init
boot2docker up

exportçıktının size verdiği komutları çalıştırın , sonra

docker info

size işe yaradığını söylemelisiniz.


Bağlam (bizi soruna getiren şey)

Docker kurulumu konusunda bir klinik yönlendirdim ve çoğu katılımcının OS X'i vardı ve bu problemle karşılaştık ve birkaç makinede üstesinden geldim. İzlediğimiz adımlar şunlardır:

İlk olarak, homebrew kurduk (evet, bazı katılımcılar sahip değildi):

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

Sonra biz sanal kutu yüklemek için kullanılan fıçı var, ve sonra docker ve boot2docker (hepsi OS X için gerekli) yüklemek için demlemek kullanılır. Demlemek için sudo kullanmayın. :

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

Çözüm

Buradaki adamın karşılaştığı sorunla karşılaştık. Aşağıdaki düzeltti. Anlıyorum initbir kerelik bir anlaşma oldu, ama muhtemelen updocker her başlattığınızda çalıştırmak zorunda kalacak:

boot2docker init
boot2docker up

Sonra upçalıştırıldığında, birkaç exportkomut verir . Bunları kopyalayıp yapıştırın ve çalıştırın.

Son olarak docker info, düzgün bir şekilde kurulduğunu söylemelisiniz.

Demo için

Komutların geri kalanı bunu göstermelidir. (Ubuntu linux'da sudo gerekli.)

docker run hello-world
docker run -it ubuntu bash

O zaman kaptaki bir kök kabukta olmalısınız:

apt-get install nano
exit

Yerel kullanıcı bash'ınıza geri dönün:

docker ps -l

"Kapsayıcı Kimliği" altındaki yaklaşık 12 basamaklı onaltılık (0-9 veya af) tanımlayıcıya bakın, ör 456789abcdef. Daha sonra değişikliğinizi uygulayabilir ve buna açıklayıcı bir ad verebilirsiniz, örneğin descriptivename:

docker commit 456789abcdef descriptivename`

5

Linux Ubuntu / Mint'te Docker'ı çalıştırmak için ihtiyacınız olan her şey:

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

İsteğe bağlı olarak, yukarıdakiler işe yaramazsa iki ek bağımlılık yüklemeniz gerekebilir:

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

1
Mümkünse kendime +1 verirdim - bir çözüm arıyordum ve unuttuğum kendi çözümümü buldum :)
tomrozb

Bu bana yardımcı oldu. Docker hizmetinin kurulumdan sonra çalışmadığını fark ettim, bu yüzden sudo service docker startUbuntu 14.04'ümdeki sorunu çözdüm.
razz0

3

Burada çözümleri denedim ve boot2docker çalışmadı.

Benim çözümüm: Mac'te boot2docker'ı kaldırın, VirtualBox'a bir Centos 7 VM yükleyin ve bu VM'nin içindeki Docker ile çalışın.


3

Benim için aşağıdaki adımlar işe yaradı:

  1. docker run hello-worldÇalışmanın sorudaki gibi bu hataya neden olan hata ile başarısız olduğunu fark ettim , ancaksudo docker run hello-world çalıştı.
  2. Mevcut kullanıcımı dockergruba ekledim sudo adduser user docker. Daha sonra makinenizi yeniden başlatmanız veya kullanmanız gerekir su - user(gruptaysanız groupskomutu kullanarak kontrol edin docker).

Bundan sonra hello-worldçalışmaya başladı.

Cevabım sudo olmadan docker'ı nasıl kullanabilirim? bu da neyin yanlış gittiğini açıklar.



Gruba kendi ekledikten sonra, newgrp docker; newgrp birincil grup, yeni birincil docker grubu ile birlikte bir alt kabuk oluşturur, ardından doğru birincil grubu yeniden oluşturur. (Biraz kesmek).
ctrl-alt-delor

2

Değer için, bu soru ve bu ilgili sorudaki tüm çözümleri denedim ve VirtualBox'ı kaldırıp yeniden yükleyene kadar hiçbiri sorunumu çözmedi . Bu işlem, VirtualBox'ı 4.2.16'dan 4.3.22'ye yükseltti (öncekim birkaç aydır sistemde kullanılmamıştı).

Sonra boot2dockerve dockerbaşka ayarlamalar yapmadan çalıştı.


2

Ben de aynı problemi yaşadım. Basit bir service docker restartsorunu çözdü.


2

Docker arka plan programı, TCP bağlantı noktası yerine bir Unix soketine bağlanır. Varsayılan olarak Unix soketi kullanıcı köküne aittir ve diğer kullanıcılar sokete yalnızca sudo kullanarak erişebilir. Docker arka plan programı her zaman kök kullanıcı olarak çalışır.

sudo groupadd docker
sudo usermod -aG docker $USER

Oturumu kapatın ve grup üyeliğinizin yeniden değerlendirilmesi için yeniden oturum açın.

docker run hello-world

Kaynak: Docker'ı kök olmayan bir kullanıcı olarak yönetme


1

Ben de aynı sorunu vardı ve bu sorunu çözmek için çeşitli şeyler denedim. Sonunda, makinemi yeniden başlatmak sorunu çözdü.


0

Olduğundan emin olun

127.0.0.1    localhost

senin

`/etc/hosts `

dosya.


0

Jenkins'ten Docker görüntüleri oluştururken de aynı sorunla karşılaştım. Kullanıcıyı dockergruba ekleyin ve Docker hizmetlerini yeniden başlatın ve benim durumumda Jenkins hizmetlerini yeniden başlatmam gerekiyordu.

Bu aldığım hataydı:

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

Olası bir başka neden de BIOS CPU görselleştirmenizin etkin olmamasıdır. Git ve önce etkinleştir!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.