Docker-Compose tidak dapat terhubung ke Docker Daemon


114

Saya mendapatkan pesan kesalahan yang mengatakan saya tidak dapat terhubung ke daemon buruh pelabuhan. Saya telah melihat jawaban orang lain yang memiliki masalah serupa tetapi tidak membantu. Saya menjalankan versi Ubuntu 15.10. Saya akan mencoba memberikan semua info yang saya miliki.

root@# docker-compose -f docker-compose-deps.yml up -d
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

Versi Docker

root@# sudo docker     version
Client:
Version:      1.9.1
API version:  1.21
Go version:   go1.4.2
Git commit:   a34a1d5
Built:        Fri Nov 20 13:20:08 UTC 2015
OS/Arch:      linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Versi Docker-Compose

root@# docker-compose --version
docker-compose version 1.5.2, build 7240ff3

Inilah yang terjadi jika saya mencoba menghentikan atau memulai layanan ...

root@# sudo service docker stop
stop: Unknown instance: 
root@# sudo service   docker start
docker start/running, process 5375

Jika saya lari ps aux | grep docker

root@# ps aux | grep docker
root      4233  0.0  0.0  13692  2204 pts/15   S+   10:27   0:00 grep --color=auto docker

Bantuan apa pun akan sangat dihargai. Beri tahu saya jika Anda mungkin memerlukan informasi lagi.


1
Harap jangan merusak postingan Anda. Setelah Anda memposting pertanyaan, Anda telah melisensikan konten ke komunitas Stack Overflow secara luas (di bawah lisensi CC-by-SA). Jika Anda ingin memisahkan kiriman ini dari akun Anda, lihat Apa rute yang tepat untuk permintaan pemutusan hubungan? .
Bug

Jawaban:


269

Saya mengalami kesalahan yang sama, setelah 15 menit debugging. Ternyata yang dibutuhkan hanyalah a sudo:) Lihat [Buat grup Docker] di sini https://docs.docker.com/engine/installation/linux/ubuntulinux/ untuk menghilangkan prefiks sudo.


35
Mereka membutuhkan kesalahan yang lebih baik = / Pertanyaan ini memiliki 13.000 tampilan
Jonathan

4
Bung, Anda menghemat sekitar 30 jam hanya untuk mereka yang memilih dan mungkin ini hanya 1% dari waktu yang Anda hemat
vak

5
perbaikan sebenarnya adalah membuat grup buruh pelabuhan, sedangkan sudoini hanya solusi / hack, menurut saya. karena bagian pembuatan grup tidak dijelaskan di sini, hanya tautan yang diberikan, dan konten tautan itu berubah, saya menganggap ini hanya tautan-jawaban, dan sekarang pada dasarnya tidak berguna (untuk bagian perbaikan yang sebenarnya). bisakah Anda menambahkan deskripsi tentang cara menambahkan grup itu?
hoijui

2
Saya pikir sudoitu ide yang buruk juga. Lihat dokumen Docker untuk mengelola Docker sebagai pengguna non-root: docs.docker.com/engine/installation/linux/linux-postinstall/…
jwhitlock

6
Pada dasarnya, yang perlu Anda lakukan hanyalah sudo usermod -aG docker $USER, dan itu akan berhasil setelahnya.
pengguna2340939

65

Saya memiliki masalah ini dan tidak ingin mengacaukan semuanya dengan menggunakan sudo. Saat menyelidiki, saya mencoba mendapatkan beberapa info:

docker info

Anehnya, saya mengalami kesalahan berikut:

Mendapat izin ditolak saat mencoba menyambung ke soket daemon Docker di unix: ///var/run/docker.sock: Dapatkan http: ///var/run/docker.sock/v1.38/info : dial unix / var /run/docker.sock: terhubung: izin ditolak

Untuk beberapa alasan saya tidak memiliki cukup hak istimewa, perintah berikut menyelesaikan masalah saya:

sudo chown $USER /var/run/docker.sock

Et voila!


Bagaimana setelah restart buruh pelabuhan lagi? Kita harus melakukan ini lagi?
Light.G

Tidak, ini seharusnya berfungsi saat Anda memulai ulang buruh pelabuhan. Tetapi saya tidak yakin apa yang terjadi jika Anda me-restart mesin Anda.
madjaoue

Secara default, Docker akan mendukung docker.sockgrup non-root, dockersebagai default. Tapi kita bisa mengubahnya dengan -Gflag selama daemon Docker dimulai. Dalam kasus saya, saya menambahkan grup untuk $USERNAME, berarti menambahkan grup buruh pelabuhan, lalu reboot mesin saya (ubuntu 16.04, PC). Ini bekerja dengan baik. Dan ini direkomendasikan di docs of docker.
Light.G

3
Bekerja untuk saya juga :)
Kamil J.

27

Tampaknya masalah Anda disebabkan oleh bug Docker lama, di mana file soket tidak dibuat ulang setelah Docker rusak. Jika ini masalahnya, maka mengganti nama file soket harus memungkinkannya dibuat ulang:

$ sudo service docker stop
$ sudo mv /var/lib/docker /var/lib/docker.bak
$ sudo service docker start

Karena bug ini telah diperbaiki, kebanyakan orang yang mendapatkan kesalahan Couldn't connect to Docker daemonmungkin mendapatkannya karena mereka tidak berada dalam dockergrup dan tidak memiliki izin untuk membaca file itu. Menjalankan dengan sudo docker ...akan memperbaikinya, tetapi bukan solusi yang bagus.

Docker dapat dijalankan sebagai pengguna non-root (tanpa sudo) yang memiliki izin grup yang sesuai. Dokumen pasca-pemasangan Linux memiliki detailnya. Versi singkatnya:

$ sudo groupadd docker
$ sudo usermod -aG docker $USER
# Log out and log back in again to apply the groups
$ groups  # docker should be in the list of groups for your user
$ docker run hello-world  # Works without sudo

Ini memungkinkan pengguna dalam dockergrup untuk menjalankan dockerdan docker-composetanpa perintah sudo. Docker sendiri menjalankan root, memungkinkan beberapa serangan, jadi Anda masih perlu berhati-hati dengan container apa yang Anda jalankan. Lihat Dokumentasi Keamanan Docker untuk lebih jelasnya.


Pertanyaan ini khusus untuk instalasi Linux, dan perbaikannya melibatkan perubahan pada sistem host Linux untuk memperbaikinya. Anda akan mendapatkan informasi yang lebih baik jika Anda memposting pertanyaan serupa dengan detail yang sama tetapi untuk Windows. Untuk mengatasinya sendiri, saya merekomendasikan membaca dokumentasi Docker untuk Windows dengan
cermat

10

Saya memiliki masalah yang sama. Setelah membuat catatan dan menganalisis beberapa hasil debugging, akhirnya, saya memecahkan apa yang bisa menjadi kesalahan yang sama. Mulai layanannya dulu,

service docker start

Jangan lupa untuk memasukkan pengguna Anda ke grup buruh pelabuhan.


Saya menjalankan sebagai root ketika saya mengalami kesalahan ini. Sepertinya sudah sudodiperbaiki untuk orang lain -_- Senang mengetahui bahwa memang begini, sehingga saya lupa melakukannya. Sangat sederhana!
Akankah

8

Anda harus menambahkan pengguna Anda ke grup "buruh pelabuhan" dengan sesuatu seperti:

sudo usermod -aG buruh pelabuhan $ {USER}


5

Saya mendapat kesalahan ini ketika ada file di Dockerfiledirektori yang tidak dapat diakses oleh pengguna saat ini. dockerkarena itu tidak dapat mengunggah konteks lengkap ke daemon dan memunculkan pesan " Tidak dapat terhubung ke Docker daemon di http + docker: // localunixsocket ".


2
Terima kasih! Ini menyelesaikannya untuk saya. Mudah untuk diperiksa, karena semua perintah buruh pelabuhan bekerja, tetapi buruh pelabuhan-menulis tidak. Docker-compose juga bekerja di direktori lain. Pesan kesalahan yang sangat menyesatkan, BTW.
Csongor Fagyal

1
Ini harus benar-benar lebih tinggi
Arlen Anderson

1
Terima kasih! bekerja untuk saya. Menggunakan docker build .akan menghasilkan masalah izin.
setiap orang

Satu-satunya hal yang berhasil - mengapa pesan kesalahan Docker begitu buruk? Terima kasih!
coderMe

4

Salah satu cara untuk mengatasinya adalah dengan menambahkan pengguna Anda ke dockergrup terlebih dahulu dengan menjalankan yang berikut ini

sudo usermod -aG docker $USER

PENTING: Ingatlah untuk keluar dari sistem Anda (bukan hanya terminal Anda) dan masuk kembali agar ini berlaku!


sudo usermod -aG docker $ {USER} Kita juga harus keluar & masuk untuk menerapkan perubahan: su - $ {USER}
user3785966

3

Dari keluaran "ps aux | grep docker", sepertinya daemon buruh pelabuhan tidak berjalan. Coba gunakan metode di bawah ini untuk melihat apa yang salah dan mengapa buruh pelabuhan tidak memulai

  1. Periksa log buruh pelabuhan

$ sudo tail -f /var/log/upstart/docker.log

  1. Coba mulai buruh pelabuhan dalam mode debug

$ sudo buruh pelabuhan -d -D


2

Dalam kasus saya, layanan buruh pelabuhan Anda mungkin dihentikan

Perintah untuk memulai layanan buruh pelabuhan:

$ sudo systemctl start docker

Perintah untuk memverifikasi jika dimulai:

$ sudo docker run hello-world


2

Alasan lain mengapa kesalahan ini dapat muncul: bagi saya itu adalah definisi jalur gambar yang salah di docker-compose.yml:

  service:
    image: ${CONTAINER_REGISTRY_BASE}/my-service
   ...

Lookis ok'ish dulu, tapi saya sudah CONTAINER_REGISTRY_BASE=eu.gcr.io/my-project/set di env. Rupanya //jalur gambar menyebabkan kesalahan ini.

docker-compose: v.1.21.2
docker: 18.03.1-ce

2

coba saja sudo. Sepertinya masalah izin!

sudo docker-compose -f docker-compose-deps.yml up -d

itu berhasil untuk saya.


1

Saya menggunakan Ubuntu 16.04 dan menemukan masalah ini juga ketika saya menggunakan docker-compose. Saya memperbaikinya dengan menjalankan perintah ini.

$ sudo systemctl start docker
$ sudo docker-compose build

1

Apakah ada kemungkinan kecil Anda menghapus mesin default? Tapi, periksa dulu apakah semua file ada (OSX, serupa di sistem lain)

brew install docker docker-compose docker-machine xhyve docker-machine-driver-xhyve
brew link docker docker-compose docker-machine xhyve docker-machine-driver-xhyve

sudo chown root:wheel /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
sudo chmod u+s /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve

Juga, instal Aplikasi Docker, karena lebih mudah untuk memelihara kontainer:

brew cask reinstall docker

ans mulai aplikasi Docker dari finder (tunggu hingga layanan sepenuhnya dimulai)

Kemudian, periksa penginstalan dengan:

docker-machine ls

jika tidak ada mesin dalam daftar, buat satu dan mulai:

docker-machine create default
docker-machine start default

Setelah ini, buat, buat, dan semua perintah lainnya harus berfungsi dengan baik.


1

dalam kasus saya itu karena izin ubuntu,

  1. Daftar barang

periksa izin oleh

docker info 

jika mereka mencetak izin masalah, masukkan deskripsi gambar di sini maka gunakan

sudo chmod -R 777 /var/run/docker.sock

0

Bagi saya perbaikannya adalah menginstal versi yang lebih baru (1.24) dari docker-composemenggunakan artikel ini .

Versi sebelumnya (1.17) diinstal dari ubunturepositori default, tetapi setelah menginstal versi yang lebih baru saya berhasil meluncurkan container. Semoga bisa membantu seseorang.


0

Saya pikir itu karena hak akses, Anda hanya perlu menulis

sudo docker-compose-deps.yml up

-1

Dalam kasus saya, ada kesalahan yang sama ketika saya mencoba docker-compose build dan solusi saya baru saja menambahkansudo

sudo docker-compose build

-2

Saya menemukan ini dan tampaknya memperbaiki masalah saya.

GitHub Fix Docker Daemon Crash

Saya mengubah konten file docker-compose-deps.yml saya seperti yang terlihat di tautan. Lalu aku lari docker-compose -f docker-compose-deps.yml up -d. Kemudian saya mengubahnya kembali dan berhasil karena beberapa alasan. Saya tidak perlu melanjutkan langkah-langkah di tautan yang saya berikan, tetapi dua langkah pertama memperbaiki masalah saya.


2
ubuntu 16.04: tambahkan saja sudo: sudo docker-compose up -d
Moccine

Itu tidak cukup sebagai jawaban. Jika Anda ingin menerima jawaban Anda sendiri, Anda harus mengemukakan alasan yang paling mendasar dari masalah Anda. Jika tidak, itu akan sangat menyesatkan bagi orang lain. BTW, ada jawaban lain di sini, apakah mereka membantu? Karena saya tidak melihat ada komentar dari Anda.
Light.G
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.