Apakah saya mencoba terhubung ke daemon yang mengaktifkan TLS tanpa TLS?

221

Saya mencoba mempelajari tentang Docker , tetapi saya terus menerima pesan kesalahan samar (untuk saya).

Mungkin contoh paling sederhana dari ini adalah mencoba mencetak versi Docker yang saya instal:

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

Saya baru saja membaca panduan pengguna dan mengikuti setiap langkah dengan tepat, jadi saya terkejut bahwa saya mendapatkan pesan ini ... Apa yang harus saya lakukan sekarang?

Saya hanya memperhatikan bahwa jika saya tidak menggunakan, sudosaya tidak mendapatkan kesalahan:

$ 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

Tentu saja, ini bukan solusi karena saya mungkin perlu menggunakan sudosuatu tempat di jalan ...

Saya baru saja menemukan halaman lain yang mengatakan " Jika Anda menggunakan OS X maka Anda tidak boleh menggunakan sudo." Saya tidak tahu apakah maksudnya hanya untuk contoh itu, atau secara umum.

Shawn
sumber
38
Pertanyaan bodoh tetapi apakah Anda sudah memulai daemon buruh pelabuhan?
Usman Ismail
Saya telah mengikuti panduan pengguna, jadi ya saya percaya daemon buruh pelabuhan dimulai. Bagaimana saya bisa mengecek?
Shawn
5
Sebenarnya Anda sudah menemukan solusinya. Dengan boot2docker Anda tidak akan perlu sudo dengan linux Anda akan selalu membutuhkan sudo. Ini karena boot2docker benar-benar menjalankan perintah-perintah itu dalam kotak virtual yang disiapkan untuk mengakses daemon dengan benar.
Usman Ismail
1
Saya berjuang dengan masalah ini dan berjalan tanpa sudo bekerja untuk saya
sak
6
Hampir semua jawaban adalah OS X spesifik (mereka menyebutkan boot2docker) meskipun OS X tidak secara eksplisit disebutkan dalam pertanyaan atau tag. Jika ada yang tertarik dengan jawaban umum, silakan lihat jawaban saya.
Piotr Dobrogost

Jawaban:

150

Bagi saya, menjalankan $(boot2docker shellinit 2> /dev/null)memperbaiki masalah.

Ini menjalankan output dari boot2docker shellinitperintah (tiga set -x ...baris) di sesi terminal Anda saat ini, yang memungkinkan dockerperintah tahu di mana menemukan mesin virtual boot2docker.

Menambahkan $(boot2docker shellinit 2> /dev/null)ke bagian bawah ~/.bash_profilefile Anda akan memastikan dockerperintah telah dikonfigurasi, setiap kali Anda membuka terminal Anda.


Untuk orang yang menggunakan ikan shell: boot2docker shellinit ^ /dev/null | source.


Perhatikan bahwa 2> /dev/null(dan yang setara dengan Ikan ^ /dev/null) adalah opsional. Seperti yang disarankan @ pablo-fernandez, ini menyembunyikan Writing ..garis.

mauvm
sumber
Saya sudah melakukan ini, tetapi saya akan menambahkannya ke .bash_profile, ide bagus
Shawn
pasti membantu dengan boot2docker 1.5, tetapi yang lebih tua boot2docker 1.2 tidak melakukannya dengan benar
Max Markov
1
Saya menambahkan pengarahan ulang stderr sehingga pernyataan "Writting ..." tidak muncul: $ (boot2docker shellinit 2> / dev / null)
Pablo Fernandez
3
Terima kasih untuk menyebutkan kerang ikan! Memecahkan masalah bagi saya.
cyrillk
1
Seperti disebutkan dalam jawaban Salvador Dali di bawah ini, pastikan Anda juga menjalankan boot2docker startsebelum menjalankan init shell.
Kevin
78

Saya mendapatkan kesalahan yang sama pada MacOS dengan sudo dan tanpa itu.

Saya telah menyelesaikannya dengan:

boot2docker start
$(boot2docker shellinit)

PS: Terima kasih kepada Alan. Saya menemukan bahwa pendekatan ini direkomendasikan dalam dokumentasi resmi mereka .

PS2: Kadang boot2docker init- kadang diperlukan sebelum menjalankan dua perintah (terima kasih Aaron).

Salvador Dali
sumber
Ini berhasil, tetapi saya tidak mengerti mengapa? apa yang dilakukan $ (boot2docker shellinit)?
Emile
Ini berfungsi di Mac OS X tetapi saya memiliki pertanyaan yang sama dengan Emile, yaitu mengapa ini bekerja?
Nissan
Ini tidak berfungsi untuk saya di Mac OSX 10.10.4 dengan Docker Tools.
B01
Saya tidak hanya menjalankan shellinit boot2docker, tetapi juga menyalin dan menjalankan setiap perintah yang ditampilkan. Dokumentasi resmi oleh tautan mengatakan bahwa perintah ini hanya menampilkan sekumpulan perintah yang diperlukan
Vitaliy Lebedev
Bekerja untuk saya juga pada mesin windows.
Noushad
55

Dalam kasus saya (Linux Mint 17) saya melakukan berbagai hal, dan saya tidak yakin yang mana yang benar-benar diperlukan.

Saya termasuk paket Ubuntu yang hilang:

$ sudo apt-get install apparmor lxc cgroup-lite

Seorang pengguna ditambahkan ke grup docker:

$ sudo usermod -aG docker ${USER}

Memulai daemon (openSUSE hanya perlu ini)

$ sudo docker -d

Terima kasih \ atribusi


Terima kasih Usman Ismail , karena mungkin itu yang terakhir ...

Pertanyaan bodoh tetapi apakah Anda sudah memulai daemon buruh pelabuhan? - Usman Ismail 17 Des '14 jam 15:04


Terima kasih juga kepada github @ MichaelJCole untuk solusi yang bekerja untuk saya, karena saya tidak memeriksa daemon ketika saya membaca komentar Usman.

Komentar 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

Berkat posting fredjean.net karena memperhatikan paket yang hilang dan melupakan instruksi instalasi Ubuntu default dan google tentang cara lain

Ternyata paket cgroup-lite dan lxc tidak diinstal secara default di Linux Mint. Menginstal keduanya kemudian memungkinkan saya untuk menjalankan bash di gambar dasar dan kemudian membangun dan menjalankan gambar saya.


Berkat komentar brettof86 tentang openSUSE

Elesa
sumber
2
Terima kasih! Dalam kasus saya (Mint 17.1) itu adalah aparatur yang hilang.
Alexandre L Telles
2
Menambahkan diri saya ke grup buruh pelabuhan melakukan hal untuk saya sudo adduser $USER docker,. Trik untuk membuatnya berlaku pada shell saat ini curgroup=$(id -gn) && newgrp docker && newgrp $curgroup, diadaptasi dari superuser.com/questions/272061/…
Tero Tilus
1
Saya kira kenyataan bahwa ini memiliki skor yang jauh lebih rendah karena lebih banyak orang menggunakan OS X daripada Linux? Saya menggunakan Ubuntu 14.04 dan berfungsi untuk saya.
es
1
openSUSE dan saya hanya perlu memulai daemon
blockloop
Maafkan ketidaktahuan saya tentang mesin buruh pelabuhan, tetapi saya tidak tahu. Tetapi jika Anda mengetahuinya, tunjukkan di sini di komentar atau edit jawabannya. : D
ElMesa
49

Masalah yang digarisbawahi adalah sederhana - kurangnya izin untuk /var/run/docker.sockmelepas soket domain.

Dari bab opsi soket Daemon dari referensi Docker Command Line untuk Docker 1.6.0:

Secara default, soket unix domain (atau soket IPC) dibuat di /var/run/docker.sock, membutuhkan izin root, atau keanggotaan grup buruh pelabuhan .

Langkah-langkah yang diperlukan untuk memberikan hak kepada pengguna dijelaskan dengan baik dalam instruksi instalasi Docker untuk Fedora :

Memberikan hak kepada pengguna untuk menggunakan Docker

Alat baris perintah docker menghubungi proses daemon docker melalui file socket yang /var/run/docker.sockdimiliki oleh root:root. Meskipun disarankan untuk menggunakan sudo untuk perintah buruh pelabuhan, jika pengguna ingin menghindarinya, administrator dapat membuat grup buruh pelabuhan, memilikinya /var/run/docker.sock, dan menambahkan pengguna ke grup ini.

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

Logout dan masuk kembali agar perubahan di atas berlaku. Harap dicatat bahwa paket Docker dari beberapa distribusi Linux (Ubuntu) sudah ditempatkan /var/run/docker.sockdi dockergrup sehingga dua langkah pertama di atas tidak diperlukan.

Dalam kasus OS X dan boot2dockersituasinya berbeda; daemon Docker berjalan di dalam VM sehingga DOCKER_HOSTvariabel lingkungan harus diatur ke VM ini sehingga klien Docker dapat menemukan daemon Docker. Ini dilakukan dengan menjalankan $(boot2docker shellinit)di shell.

Piotr Dobrogost
sumber
1
Hmm, situasiku mirip tapi agak berbeda. Saya menjalankan di Ubuntu 14.04. Docker tampaknya terinstal dengan benar (hanya memasukkan "buruh pelabuhan" memunculkan daftar perintah). Saya membuat grup buruh pelabuhan dan menjadikan pengguna saya anggota darinya. Ini hanya sistem rumah dan saya hanya bermain dengan buruh pelabuhan. Namun apa pun selain hanya "buruh pelabuhan" memunculkan kesalahan. Saya percaya karena buruh pelabuhan tidak dapat membuat / var / run / doker. Pada sistem saya / var / run adalah symlink ke / run yang root: root dan 755 perm sehingga buruh pelabuhan tidak dapat menulis di sana. Tidak yakin apa solusi saya untuk ini.
Steve Cohen
Piotr, penjelasan ini sangat berguna. Anda dapat menjelaskan mengapa "$ (boot2docker shellinit)" berfungsi, tetapi "boot2docker shellinit" tidak berfungsi? Saya mengerti bahwa tanda kurung menyiratkan eksekusi dalam sebuah subkulit, tapi saya belum bisa menebak mengapa itu diperlukan untuk membuat buruh pelabuhan bekerja dengan baik ketika tidak ada perintah lain yang membutuhkannya ....
Alex Edelstein
@AlexEdelstein Perbedaan antara boot2docker shellinitdan perintah lain adalah bahwa perintah ini tidak membuat perubahan apa pun, tetapi hanya menghasilkan (mencetak) perintah yang harus Anda jalankan sendiri. Anda dapat menjalankan boot2docker shellinitpertama dan kemudian secara manual menyalin dan menjalankan setiap perintah dari outputnya. Lebih mudah menjalankan semua perintah dengan menjalankan boot2docker shellinitsubprocess (dengan $()sintaksis) karena dengan cara ini setiap baris output dijalankan secara otomatis sebagai perintah shell. Lihat docs.docker.com/installation/mac/#from-your-command-line di mana ini ditampilkan secara rinci.
Piotr Dobrogost
@SteveCohen Anda mungkin ingin memeriksa apakah layanan buruh pelabuhan berjalan dengan sudo service docker status. Di Ubuntu 14.04 saya tidak berjalan setelah instalasi, yang menyebabkan kesalahan.
razz0
1
Terima kasih telah mengaitkan dokumentasi aktual untuk penyebab utama, menyelesaikan masalah saya
RonaldFindling
23

Pastikan daemon Docker berjalan:

service docker start

Itu memperbaikinya bagi saya!

superlogikal
sumber
sudo service docker startuntuk saya
Milimetri
systemctl enable docker.servicedan systemctl start docker.service Untuk pengguna system.d linux (Arch dalam kasus saya)
PRDeving
sudo service docker restartuntuk saya
Api Beku
15
  1. Docker menyebut dirinya runtime mandiri untuk wadah Linux. Secara sederhana ini berfungsi baik sebagai server dan klien.
  2. The $ docker versionperintah query adalah internal untuk dieksekusi Docker dan tidak untuk menjalankan daemon / jasa.
  3. $ docker images or $ docker ps or $ docker pull centos adalah perintah yang mengirim pertanyaan ke daemon docker / layanan yang berjalan.
  4. Docker secara default mendukung koneksi TLS ke daemon / layanannya.
  5. Hanya jika pengguna yang Anda masuk sebagai bagian dari grup pengguna dockeratau Anda telah menggunakan sudosebelum perintah, misalnya $ sudo docker images, itu tidak memerlukan konektivitas TLS.

Kunjungi halaman dokumentasi Docker. Lindungi soket daemon Docker .

Gulir sedikit ke atas dan temukan warning sectionkejelasannya.

Yogesh Kamat
sumber
1
Jawaban populer sejauh ini hanya berlaku untuk OS X sedangkan yang ini lebih umum, menjelaskan penyebabnya dan memungkinkan saya untuk menyelesaikannya di GNU / Linux.
sinisterstuf
1
@lustuste perintah Anda akan MENGHAPUS KELOMPOK TAMBAHAN PENGGUNA. karena "-a" yang hilang
Pawel Barcik
3
@ PawelBarcik kesalahan mengerikan, terima kasih:sudo usermod -a -G docker {username}
laffuste
1
Bagaimana jawaban ini menjawab pertanyaan? Apa alasan kesalahan itu? Bagaimana memperbaikinya? (Saya tidak menggunakan OS X sehingga jawaban yang ada tidak berlaku).
Piotr Dobrogost
13

Anda perlu melakukan:

$boot2docker init
$boot2docker start

Pengaturan berikut memperbaiki masalah:

$export DOCKER_HOST=tcp://192.168.59.103:2376
$export DOCKER_CERT_PATH=/Users/{profileName}/.boot2docker/certs/boot2docker-vm
$export DOCKER_TLS_VERIFY=1
AL-Tamimi
sumber
1
Perintah ini juga dapat digunakan untuk mengatur variabel lingkungan (daripada melakukannya secara manual):eval "$(boot2docker shellinit)"
Powers
11

Mungkin saja Anda belum memiliki izin untuk file tersebut. Itu terjadi pada saya setelah saya menambahkan diri ke dockergrup menggunakan

sudo gpasswd -a user docker

tapi belum keluar.

Untuk mengatasi ini, Anda dapat masuk kembali, atau menggunakan sg docker "docker <subcommand> ..."sebelum Anda keluar.

Jika Anda berada dalam kelompok docker di /etc/group, Anda harus bisa menjalankannya tanpa password mengetik.

https://dingyichen.wordpress.com/2015/02/05/docker-dial-unix-varrundocker-sock-no-such-file- atau-directory-are-you-trying-to-connect-to-a- tls-enabled-daemon-without-tls /

Ding-Yi Chen
sumber
7

Di Ubuntu setelah menginstal lxc-docker Anda perlu menambahkan pengguna Anda ke grup pengguna buruh pelabuhan :

sudo usermod -a -G docker myusername

Ini karena izin file soket:

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

JANGAN LARI usermod TANPA "-a" seperti yang disarankan di salah satu komentar lain atau itu akan menghapus pengaturan grup tambahan Anda dan hanya akan meninggalkan grup "buruh pelabuhan"

Inilah yang akan terjadi:

➜  ~  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)
Pawel Barcik
sumber
6

TLDR : Ini membuat grup meetup Python saya melewati masalah ini ketika saya menjalankan klinik untuk menginstal docker dan sebagian besar pengguna menggunakan OS X:

boot2docker init
boot2docker up

jalankan exportperintah yang diberikan oleh output kepada Anda

docker info

harus memberitahu Anda itu berfungsi.


Konteks (apa yang membawa kita ke masalah)

Saya memimpin sebuah klinik tentang menginstal buruh pelabuhan dan sebagian besar peserta memiliki OS X, dan kami mengalami masalah ini dan saya mengatasinya pada beberapa mesin. Inilah langkah-langkah yang kami ikuti:

Pertama, kami memasang homebrew (ya, beberapa peserta tidak memilikinya):

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

Lalu kami mendapat tong, yang kami gunakan untuk menginstal virtualbox, dan kemudian menggunakan minuman untuk menginstal buruh pelabuhan dan boot2docker (semua diperlukan untuk OS X) Jangan gunakan sudo untuk minuman. :

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

Solusinya

Saat itulah kami mengalami masalah, penanya di sini. Berikut ini memperbaikinya. Saya mengerti initadalah kesepakatan satu kali, tetapi Anda mungkin harus menjalankan upsetiap kali Anda mulai buruh pelabuhan:

boot2docker init
boot2docker up

Kemudian ketika uptelah dijalankan, ia memberikan beberapa exportperintah. Salin dan tempel dan jalankan.

Akhirnya docker infoharus memberitahu Anda itu terpasang dengan benar.

Untuk Demo

Perintah lainnya harus mendemokannya. (pada linux Ubuntu saya membutuhkan sudo.)

docker run hello-world
docker run -it ubuntu bash

Maka Anda harus menggunakan shell root di wadah:

apt-get install nano
exit

Kembali ke bash pengguna asli Anda:

docker ps -l

Cari pengidentifikasi heksadesimal sekitar 12 digit (0-9 atau af) di bawah "ID Penampung", misalnya 456789abcdef. Anda kemudian dapat melakukan perubahan dan menamainya beberapa nama deskriptif, seperti descriptivename:

docker commit 456789abcdef descriptivename`
Aaron Hall
sumber
5

Semua yang Anda butuhkan untuk menjalankan Docker di Linux Ubuntu / Mint:

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

Secara opsional, Anda mungkin perlu menginstal dua dependensi tambahan jika hal di atas tidak berfungsi:

sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart
Tomrozb
sumber
1
Saya akan memberi diri saya +1 jika itu mungkin - saya sedang mencari solusi dan menemukan solusi saya sendiri yang saya lupa :)
tomrozb
Ini membantu saya. Saya menyadari bahwa layanan buruh pelabuhan tidak berjalan setelah instalasi, jadi sudo service docker startmenyelesaikan masalah pada Ubuntu 14.04 saya.
razz0
3

Saya mencoba solusinya di sini, dan boot2docker tidak berfungsi.

Solusi saya: Hapus instalan boot2docker di Mac, instal Centos 7 VM di VirtualBox, dan bekerja dengan Docker di dalam VM itu.

MondKin
sumber
3

Bagi saya langkah-langkah berikut berhasil:

  1. Saya perhatikan bahwa menjalankan docker run hello-worldgagal dengan kesalahan socked ini seperti dalam pertanyaan, tetapi menjalankan sudo docker run hello-worldberhasil.
  2. Saya menambahkan pengguna saya saat ini ke dockergrup sudo adduser user docker,. Maka Anda harus me-restart mesin Anda atau menggunakan su - user(periksa menggunakan groupsperintah jika ada dalam dockergrup).

Setelah itu, hello-worldmulai bekerja.

Jawaban saya didasarkan pada Bagaimana saya bisa menggunakan buruh pelabuhan tanpa sudo? yang menjelaskan apa yang salah.


csharpfolk
sumber
Setelah menambahkan diri ke grup, lakukan `newgrp docker; newgrp primary-group ini membuat subshell, dengan grup docker baru yang baru, kemudian membangun kembali grup primer yang benar. (Sedikit peretasan).
ctrl-alt-delor
2

Untuk apa nilainya, saya mencoba semua solusi dalam pertanyaan ini dan dalam pertanyaan terkait ini dan tidak ada yang menyelesaikan masalah saya sampai saya mencopot dan menginstal ulang VirtualBox . Proses ini memutakhirkan VirtualBox dari versi 4.2.16 ke 4.3.22 (yang sebelumnya tidak digunakan pada sistem selama beberapa bulan).

Kemudian boot2dockerdan dockerbekerja tanpa penyesuaian lainnya.

daedalus
sumber
2

Saya memiliki masalah yang sama. Sederhana service docker restartmemecahkan masalah.

ChaitanyaBhatt
sumber
2

Daemon Docker mengikat ke soket Unix alih-alih port TCP. Secara default soket Unix dimiliki oleh root pengguna dan pengguna lain hanya dapat mengaksesnya menggunakan sudo. Daemon Docker selalu berjalan sebagai pengguna root.

sudo groupadd docker
sudo usermod -aG docker $USER

Logout dan log in kembali sehingga keanggotaan grup Anda dievaluasi kembali.

docker run hello-world

Sumber: Kelola Docker sebagai pengguna non-root

Shabbir Bata
sumber
1

Saya memiliki masalah yang sama dan mencoba berbagai hal untuk memperbaikinya, mengubah file .bash_profile, masuk dan keluar, tanpa hasil. Pada akhirnya, me-restart mesin saya memperbaikinya.

DavB
sumber
0

Pastikan ada

127.0.0.1    localhost

di Anda

`/etc/hosts `

mengajukan.

Bolerovt
sumber
0

Saya menghadapi masalah yang sama ketika saya membuat gambar Docker dari Jenkins. Cukup tambahkan pengguna ke dockergrup dan kemudian restart layanan Docker dan dalam kasus saya saya harus me-restart layanan Jenkins.

Ini adalah kesalahan yang saya dapatkan:

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]#
Avinash Singh
sumber
-1

Alasan lain yang mungkin adalah bahwa visualisasi CPU BIOS Anda tidak diaktifkan. Pergi dan aktifkan dulu!

Xianlin
sumber