Perintah Docker tidak dapat terhubung ke daemon Docker

246

Saya ingin pindah ke Docker, jadi saya baru saja mulai mengacaukannya. Saya telah menginstal Docker pada instalasi VirtualBox Ubuntu 15.10 (Wily Werewolf) dan seperti yang disarankan di sini saya kemudian mencoba menjalankan gambar Docker nginx dasar :

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Jadi saya memeriksa apakah Docker berjalan:

$ 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 vr 2015-11-06 08:41:48 CET; 15min ago
     Docs: https://docs.docker.com
 Main PID: 7542 (docker)
   CGroup: /system.slice/docker.service
           └─7542 /usr/bin/docker daemon -H fd://

nov 06 08:41:47 kramer65-VirtualBox systemd[1]: Starting Docker Application Container Engine...
nov 06 08:41:47 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:47.900410966+01:00" level=info msg="API ...ock"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.033514149+01:00" level=info msg="Fire...lse"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.141594321+01:00" level=info msg="Defa...ess"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.416294436+01:00" level=warning msg="Y...it."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.565507576+01:00" level=info msg="Load...rt."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567907022+01:00" level=info msg="Load...ne."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567945214+01:00" level=info msg="Daem...ion"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567969891+01:00" level=info msg="Dock....9.0
nov 06 08:41:48 kramer65-VirtualBox systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

Ini menunjukkan bahwa daemon Docker sebenarnya sudah berjalan, tetapi untuk memastikan saya baru saja memulai daemon Docker secara manual:

$ sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock           
INFO[0000] [graphdriver] using prior storage driver "aufs" 
INFO[0000] Firewalld running: false                     
INFO[0000] Default bridge (docker0) is assigned with an IP address XXX.XX.X.X/XX. Daemon option --bip can be used to set a preferred IP address 
WARN[0000] Your kernel does not support swap memory limit. 
INFO[0000] Loading containers: start.                   

INFO[0000] Loading containers: done.                    
INFO[0000] Daemon has completed initialization          
INFO[0000] Docker daemon                                 commit=76d6bc9 execdriver=native-0.2 graphdriver=aufs version=1.9.0

Saya kemudian mencoba menjalankan gambar lagi, tetapi dengan hasil yang sama:

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Saya mencoba sudo'ing perintah, tetapi tidak berhasil. Apa yang saya lakukan salah di sini?

kramer65
sumber
1
permasalahan yang sama. Saya di Ubuntu 15.10 juga :(
Daniel Loureiro
1
masalah yang sama, ubuntu 15,10
Lucas Tettamanti
1
Cukup restart layanan buruh pelabuhan Anda. Terima kasih @jim <pre> sudo service docker restart </pre>
Nasruddin
1
Nasruddin, itu pasti TIDAK bekerja untuk saya ... :-(
Rafael_Espericueta
1
Saya harus me-restart mesin untuk membuatnya berfungsi.
romaroma

Jawaban:

443

Anda perlu menambahkan pengguna Anda saat ini ke grup buruh pelabuhan sebagai berikut:

sudo usermod -aG docker $(whoami)

lalu keluar & masuk lagi ke sistem atau restart sistem. diuji olehdocker version

untuk info lebih lanjut bagaimana menginstal mesin buruh pelabuhan ikuti dokumentasi buruh pelabuhan

Zubair Alam
sumber
konyol tapi itu berhasil untuk saya juga @RobinLoxley, ini seharusnya jawaban yang sebenarnya bukan hanya komentar, beri tahu saya jika Anda mempostingnya, saya akan memberi Anda upvote;)
benka
9
Saya akan menggarisbawahi "logout & login lagi ke sistem atau restart sistem"
Michele
3
@Junaid jawaban di bawah ini menunjukkan cara menghindari langkah logout / login, jika Anda, seperti saya, sangat malas Anda tidak ingin memulai ulang aplikasi Anda;)
brandizzi
Ini persis seperti yang disebutkan dalam tutorial Docker, tetapi logout dan kembali lagi tidak bekerja untuk saya. Saya harus me-restart sistem untuk membuatnya berfungsi.
aalaap
4
Saya melihat informasi versi buruh pelabuhan, tetapi pada akhir output, saya melihatCannot connect to the Docker daemon. Is the docker daemon running on this host?
ghanbari
137

Tambahkan pengguna ke grup buruh pelabuhan

  • Tambahkan grup buruh pelabuhan jika belum ada:

    sudo groupadd docker

  • Tambahkan pengguna yang terhubung "$ {USER}" ke grup buruh pelabuhan:

    sudo gpasswd -a ${USER} docker

  • Mulai ulang daemon Docker:

    sudo service docker restart

  • Entah lakukan newgrp dockeratau keluar / masuk untuk mengaktifkan perubahan ke grup.

neo
sumber
1
Tampaknya itu newgrp dockerlokal untuk shell, bukan sesi login. Ini sama sekali tidak jelas dari halaman manual.
bergey
1
Bekerja untukku. Terima kasih!
Apokai
Satu-satunya jawaban yang berhasil! Di mesin cloud Linux pribadi, dan itu masih berfungsi!
Meghna Natraj
Bekerja di Ubuntu 18.04! Terima kasih
Kshitij Saraogi
33

Biasanya, perintah berikut melakukan trik:

sudo service docker restart

Ini, alih-alih docker startuntuk kasus di mana Docker tampaknya sudah berjalan.

Jika itu berhasil maka, seperti yang disarankan dan di jawaban lain dan pada masalah GitHub ini , jika Anda belum menambahkan diri Anda di grup buruh pelabuhan lakukan dengan menjalankan:

sudo usermod -aG docker <your-username> 

Dan kemungkinan besar Anda baik untuk pergi.


Adapun orang lain menabrak ini, di beberapa buruh pelabuhan OS tidak mulai tepat setelah Anda menginstalnya dan, sebagai hasilnya, hal yang sama can't connect to daemon messagemuncul. Dalam hal ini Anda dapat terlebih dahulu memverifikasi bahwa Docker memang tidak berjalan dengan memeriksa status layanan buruh pelabuhan Anda dengan mengeksekusi:

sudo service docker status

Jika outputnya terlihat seperti: docker stop/waitingbukannya docker start/running, process 15378maka itu berarti Docker tidak aktif. Dalam hal ini pastikan Anda memulainya dengan:

sudo service docker start

Dan, seperti sebelumnya, kemungkinan besar Anda akan baik-baik saja.

Dimitris Fasarakis Hilliard
sumber
18

note to self: Saya mendapatkan kesalahan dari judul pertanyaan ketika saya lupa menjalankan dockerperintah dengan sudo:

sudo docker run ...

[Ubuntu 15.10]

Martin Vseticka
sumber
12

Punya masalah yang sama dan apa yang berhasil bagi saya adalah:
Memeriksa kepemilikan /var/run/docker.sock

ls -l /var/run/docker.sock

Jika Anda bukan pemiliknya, maka ubah kepemilikan dengan perintah tersebut

sudo chown *your-username* /var/run/docker.sock

Kemudian Anda dapat melanjutkan dan mencoba menjalankan perintah buruh pelabuhan bebas repot: D

kevthanewversi
sumber
2
Setelah menghabiskan semua kemungkinan lain, inilah yang membuatnya bekerja di Sabayon / Gentoo Linux untuk saya.
gerrit_hoekstra
File itu dimiliki oleh roottetapi dalam dockergrup. Pendekatan yang benar adalah dengan menetapkan pengguna Anda saat ini ke dockergrup, menurut dokumentasi Docker:sudo groupadd docker && sudo usermod -aG docker $USER
Lucas Bustamante
9

Setelah menginstal semuanya dan memulai layanan, coba tutup terminal Anda dan buka lagi, lalu coba tarik gambar Anda

Edit

Saya juga mengalami masalah ini lagi, jika solusi di atas tidak berfungsi, coba solusi ini yaitu perintah di bawah

sudo mv /var/lib/docker/network/files/ /tmp/dn-bak

Pertimbangan

Jika perintah di atas berfungsi, Anda mungkin memiliki masalah dengan buruh pelabuhan jaringan, toh hal ini menyelesaikannya, untuk mengonfirmasi itu, lihat log dengan perintah di bawah

tail -5f /var/log/upstart/docker.log

Jika output memiliki sesuatu seperti itu

FATA[0000] Error starting daemon: Error initializing network controller: could not delete the default bridge network: network bridge has active endpoints 
/var/run/docker.sock is up

Anda benar-benar mengalami masalah jaringan, namun saya belum tahu apakah di lain waktu Anda me-restart ( memperbarui , 2 bulan tidak ada masalah lagi) OS Anda akan mendapatkan masalah ini lagi dan jika itu adalah bug atau masalah instalasi

Versi buruh pelabuhan saya

Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64
deFreitas
sumber
8

Setelah menginstal buruh pelabuhan di Ubuntu, saya menjalankan perintah berikut:

sudo service docker start

Sudahkah Anda mencobanya?

yushulx
sumber
6

Saya memiliki masalah yang sama. Berjuang selama dua hari untuk menyelesaikannya.

Itu hanya berfungsi ketika saya melakukannya:

  1. Menurut Tutorial Docker , Anda perlu menambahkan kunci Docker jika belum ditambahkan menggunakan:

    $ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add -

  2. Kemudian pastikan Anda memberikan hak buruh pelabuhan untuk diri sendiri menggunakan:

    $ sudo usermod -aG docker $USER

Semoga ini bisa membantu Anda juga.

AmrMohallel
sumber
2
Langkah 2 dapat disederhanakan sebagai:sudo usermod -aG docker $USER
johntellsall
5

masukkan sebagai root ( sudo su) dan coba ini:

unset DOCKER_HOST
docker run --name mynginx1 -P -d nginx

Saya punya masalah yang sama di sini, dan perintah buruh pelabuhan hanya bekerja berjalan sebagai root, dan juga dengan ini DOCKER_HOSTkosong

PS: juga berhati-hatilah bahwa cara yang benar dan resmi untuk menginstal pada Ubuntu adalah dengan menggunakan repositori apt mereka (bahkan pada 15.10), tidak dengan hal " wget " itu.

Daniel Loureiro
sumber
"wget" itu hanya menempatkan repositori buruh pelabuhan di sumber apt Anda .... yaitu hal yang sama yang Anda diminta lakukan secara manual dalam "cara yang benar dan resmi" ....
Alar
1
Aku khawatir kamu salah, Alar. Metode "wget" akan menambahkan repositori buruh pelabuhan di sumber apt Anda, yang bagus, tetapi itu juga akan melakukan banyak hal buruk lainnya seperti menyetel DOCKER_HOST env var, yang akan mencegah buruh pelabuhan untuk kehabisan kotak. Bukan karena kedua metode menambahkan buruh pelabuhan ke repo bahwa keduanya sama.
Daniel Loureiro
5

Untuk OSX :

Setelah membuka buruh pelabuhan dan memulai mesin 'default' melalui Terminal Quickstart ( https://docs.docker.com/engine/installation/mac/ ), Anda mencoba perintah buruh pelabuhan dan mendapatkan pesan "tidak dapat terhubung ke docker daemon" , ternyata Anda memerlukan beberapa variabel env ditetapkan :

eval "$(docker-machine env default)"

Kemudian cobalah dengan docker run hello-worlduntuk melihat apakah semuanya sangat bagus.

Danny
sumber
5

Untuk yang sudah mencoba me-restart mesin Anda, membatalkan pengaturan variabel lingkungan DOCKER_HOST seperti yang diceritakan dalam dokumentasi buruh pelabuhan dan sisanya hanya mencoba untuk pergi dengan

sudo service docker restart

Hanya ini yang berhasil bagi saya bahkan setelah me-restart mesin.

Mr.Moe
sumber
2
Ini diperlukan jika Anda hanya keluar dan masuk.
Zhang LongQI
4

Memberikan akses non-root - dari buruh pelabuhan

Tambahkan grup buruh pelabuhan jika belum ada.

$ sudo groupadd docker

Tambahkan pengguna yang terhubung "$ {USER}" ke grup buruh pelabuhan.

Ubah nama pengguna agar cocok dengan pengguna pilihan Anda.

Anda mungkin harus keluar dan masuk lagi agar ini berlaku.

$ sudo gpasswd -a ${USER} docker

Mulai kembali daemon Docker.

$ sudo service docker restart
Eduardo Marín Izquierdo
sumber
3

Pertanyaan ini saat ini nomor 3 di pencarian Google. Setelah melakukan riset untuk menyelesaikan masalah ini pada sistem Linux saya, saya pikir saya akan menulis jawaban ini. Posting asli menyatakan masalahnya ada di Ubuntu tapi saya juga mengalami masalah menggunakan Fedora. Dengan mengingat hal itu, inilah yang saya lakukan untuk memperbaiki masalahnya.

Pada Fedora 22

Menginstal Docker:

$> curl -fsSL https://get.docker.com/ | sh

Setelah menginstal Docker:

Seorang pengguna perlu ditambahkan ke grup buruh pelabuhan.

$> sudo usermod -aG docker

Daemon buruh pelabuhan harus dimulai

$> sudo service docker start

Anda dapat mengatur daemon untuk memulai saat boot

$> sudo chkconfig docker on

Anda dapat memverifikasi layanan buruh pelabuhan sedang berjalan

$> service docker status

Dan satu pemeriksaan terakhir terakhir

$> docker run hello-world
Ronald Weidner
sumber
Pada Fedora 23, grup ini dapat dipanggil dockerroot. Juga, Anda mungkin ingin menginstalnya dari repositori (alih-alih curl ... | sh) sehingga dapat diperbarui nanti:dnf install docker
basic6
banyak yang tidak memiliki "buruh pelabuhan" grup, jadi kami harus menambahkannya terlebih dahulu groupadd dockerdan kemudian menambahkannya ke nama pengguna Andasudo usermod -aG docker your_username
TonyTony
2

Coba gunakan "sudo" dengan perintah yang Anda jalankan.

pengguna3737461
sumber
"Aku mencoba sudo'ing perintah, tetapi tidak berhasil. Apakah ada yang tahu apa yang aku lakukan salah di sini? Semua tips dipersilahkan!"
RhinoDevel
2

Saya memiliki masalah yang sama saat menjalankan buruh pelabuhan.

Anda dapat menjalankan perintah sebagai pengguna sudo :

sudo docker ***your command here***
Dadaso Zanzane
sumber
2

Untuk Ubuntu:
Terjadi dengan saya ketika saya memperbarui buruh pelabuhan.
Anda perlu membuka kedok layanan dan soket lalu restart layanan.

Berikut ini bekerja untuk saya:

systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service

Apa yang terjadi di balik layar
systemd juga memiliki kemampuan untuk menandai unit sebagai sepenuhnya tidak dapat dimulai, secara otomatis atau manual, dengan menghubungkannya ke / dev / null. Ini disebut masking unit, dan dimungkinkan dengan perintah mask.

sudo systemctl mask docker.service

Anda dapat memeriksa daftar layanan bertopeng menggunakan:

sudo systemctl list-unit-files

Output dari sudo systemctl daftar-unit-file

Untuk mengaktifkan layanan otomatis / manual, Anda perlu membuka kedoknya menggunakan:

sudo sytemctl unmask docker.service

Sekarang layanan akan diaktifkan seperti yang ditunjukkan di bawah ini masukkan deskripsi gambar di sini

lordzuko
sumber
1

Sebagai buruh pelabuhan mengikat ke soket unix yang dimiliki oleh root saat memulai, menggunakan 'sudo' bersama dengan perintah buruh pelabuhan akan bekerja.

raja
sumber
1
  1. Saya juga punya masalah yang sama. Masalahnya adalah dalam soket yang dialokasikan untuk docker-daemon dan docker-client.
  2. Pertama, izin tidak ditetapkan untuk docker-client di docker.sock Anda dapat mengaturnya menggunakan "sudo usermod-aG docker $ USER"
  3. Kemudian periksa file bash Anda di mana docker-klien berjalan, Bagi saya itu di 0,0.0.0:2375, sedangkan docker-daemon sedang berjalan pada soket unix. (Itu diatur dalam file konfigurasi dockerd).
  4. Komentari bash-line dan itu akan berfungsi dengan baik
  5. Tetapi jika Anda ingin membuatnya bekerja pada port TCP dan bukannya unix socket, ubah file konfigurasi dockerd dan atur di 0.0.0.0.2375 dan pertahankan baris dalam bash seperti jika ada atau atur ke 0.0.0.0: 2375.
Nilesh Kande
sumber
1

Mungkin ini akan membantu seseorang, karena pesan kesalahannya sangat tidak membantu, dan saya telah melalui semua langkah izin standar berkali-kali tetapi tidak berhasil.

Docker sesekali meninggalkan variabel lingkungan hantu di tempat yang memblokir akses, meskipun sistem Anda jika tidak diatur dengan benar. Perintah shell berikut dapat membuatnya diakses kembali, jika Anda telah menjalankannya pada satu titik dan berhenti bekerja sama setelah reboot:

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

Saya memiliki menginstal buruh pelabuhan yang sebelumnya bekerja, dan setelah me-reboot laptop saya hanya menolak untuk bekerja. Itu benar ditambahkan ke grup buruh pelabuhan pengguna, memiliki izin yang benar pada soket, dll, tapi masih tidak bisa berlari docker login, docker run ...dll ini tetap untukku. Sayangnya saya harus menjalankan ini pada setiap reboot. Ini disebutkan pada beberapa masalah github juga sebagai solusi, meskipun sepertinya bug bahwa ini adalah penghalang yang terus-menerus untuk memperbaiki operasi Docker (catatan: Saya di Arch Linux, bukan OSX, tapi ini masalah yang sama untuk saya).

mopsyd
sumber
1

Diuji di Ubuntu 16.04

# Create the docker group and add your user to the docker group
groupadd docker
usermod -aG docker $USER
newgrp docker

# Configure docker service to be exposed
mkdir -p /etc/systemd/system/docker.service.d
echo -e '[Service]\nExecStart=\nExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376' >> /etc/systemd/system/docker.service.d/override.conf

# restart service
systemctl daemon-reload
service docker restart
Thiago Falcao
sumber
0

Saya menghadapi kesalahan yang sama pada contoh Amazon EC2. Masalah diperbaiki setelah memulai kembali instance.

Sumit Bhoyar
sumber
0

Tambahkan pengguna saat ini ke grup buruh pelabuhan:

sudo usermod -aG docker $(whoami)

BALAJI POTHULA
sumber
Harap format ini sebagai kode! Dan jelaskan perintah ini. Dan gunakan --versi opsi yang panjang (dimulai dengan ).
buhtz
0

Untuk Ubuntu 16.04

/lib/systemd/system/docker.servicePerubahan file di dalam :

ExecStart=/usr/bin/dockerd fd://

dengan:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375

/etc/init.d/dockerPerubahan file di dalam :

DOCKER_OPTS=

dengan:

DOCKER_OPTS="-H tcp://0.0.0.0:2375"

dan kemudian restart komputer Anda.

pengguna6646280
sumber