Cara Memecahkan Masalah Kesalahan "Tidak Dapat Terhubung ke Docker Daemon"

Diterbitkan: 2022-08-14

Grafik yang menunjukkan logo Docker

Docker adalah salah satu platform terkemuka untuk membangun dan menjalankan wadah perangkat lunak. Muncul dengan semua yang Anda butuhkan untuk menggunakan wadah pada satu host atau beberapa node terdistribusi dalam mode Swarm.

Docker memiliki arsitektur berbasis daemon. Perangkat lunak yang bertanggung jawab untuk membuat dan memulai container tidak bergantung pada proses CLI yang menerima perintah Anda. Ini berarti Anda akan melihat kesalahan di CLI jika Anda mencoba menjalankan perintah tanpa koneksi daemon yang aktif. Dalam artikel ini, kami akan membagikan beberapa metode untuk memecahkan masalah pesan yang membuat frustrasi ini.

Gejala Masalah

CLI Docker bergantung pada koneksi daemon yang tersedia. Ini berinteraksi dengan daemon menggunakan panggilan API. Ketika daemon yang dikonfigurasi tidak dapat diakses, perintah docker seperti docker ps , docker run , dan docker build akan menampilkan pesan kesalahan yang mirip dengan ini:

 $ docker menjalankan hello-world:latest
Tidak dapat terhubung ke daemon Docker di unix:///var/run/docker.sock
Apakah daemon buruh pelabuhan berjalan?

Ini menunjukkan bahwa CLI mencoba berkomunikasi dengan daemon Docker menggunakan soket Unix /var/run/docker.sock . Soket tidak terbuka sehingga koneksi gagal.

1. Periksa bahwa Layanan Daemon Docker Sedang Berjalan

Daemon Docker biasanya dikelola oleh layanan systemd yang secara otomatis memulai Docker setelah host Anda melakukan boot ulang. Anda dapat memulai pemecahan masalah dengan memeriksa apakah layanan ini berjalan:

 $ sudo systemctl status buruh pelabuhan
docker.service - Mesin Kontainer Aplikasi Docker
     Dimuat: dimuat (/ lib/systemd/system/docker.service; diaktifkan; preset vendor: diaktifkan)
     Aktif: tidak aktif (mati)

Layanan harus melaporkan Active: active (running) jika daemon sedang berjalan. Contoh di atas menunjukkan inactive (dead) yang berarti daemon telah berhenti.

Mulai Docker menggunakan perintah berikut:

 $ sudo systemctl start docker

Sekarang Anda harus dapat menjalankan perintah CLI docker dengan sukses.

Anda mungkin menemukan bahwa Docker tetap dalam status berhenti setelah Anda me-reboot mesin Anda. Anda dapat mengatasi ini dengan mengaktifkan layanan, memungkinkan systemd untuk memulainya secara otomatis:

 $ sudo systemctl aktifkan buruh pelabuhan
$ sudo systemctl daemon-reload

Perintah daemon-reload menginstruksikan systemd untuk memuat ulang konfigurasinya untuk menerapkan perubahan.

2. Mulai Daemon Secara Manual

Terkadang Anda mungkin menggunakan sistem yang tidak menginstal layanan Docker. Anda dapat memulai daemon Docker secara manual menggunakan perintah dockerd . Ini biasanya perlu dijalankan sebagai root .

 $ sudo buruh pelabuhan
INFO[2022-06-29T15:12:49.303428726+01:00] Memulai

Docker akan tetap dapat diakses selama perintah berjalan. Gunakan Ctrl+C untuk menghentikan daemon.

3. Memeriksa CLI Apakah Menargetkan Daemon yang Benar

Masalah dapat terjadi ketika CLI mencoba terhubung ke instance daemon Docker jarak jauh. Ini biasanya penyebab ketika pesan kesalahan menunjukkan alamat TCP:

 $ docker menjalankan hello-world:latest
Tidak dapat terhubung ke daemon Docker di tcp:///0.0.0.0:2375

Dalam contoh ini, CLI docker mencoba menghubungi daemon Docker di 0.0.0.0:2375 menggunakan TCP, bukan soket Unix Docker lokal. Ini akan gagal jika dukungan TCP daemon Docker dinonaktifkan atau host yang ditentukan tidak dapat diakses di jaringan.

Anda biasanya dapat menyelesaikan ini dengan beralih ke konteks Docker CLI yang benar untuk koneksi daemon yang ingin Anda gunakan:

 $ konteks buruh pelabuhan gunakan default

Anda dapat membuat daftar semua konteks yang tersedia dan titik akhir daemon yang terhubung dengannya dengan perintah context ls :

 $ konteks buruh pelabuhan ls
NAMA DESKRIPSI DOCKER ENDPOINT             
default * Konfigurasi berbasis DOCKER_HOST saat ini unix:///var/run/docker.sock

Konteks yang dipilih saat ini disorot dengan tanda bintang.

Nilai tak terduga di kolom DOCKER ENDPOINT biasanya disebabkan oleh variabel lingkungan DOCKER_HOST yang disetel. Anda akan melihat peringatan jika hal ini terjadi:

 $ ekspor DOCKER_HOST=1.2.3.4
$ konteks buruh pelabuhan ls
NAMA DESKRIPSI DOCKER ENDPOINT
default * Konfigurasi berbasis DOCKER_HOST saat ini tcp://1.2.3.4:2375
Peringatan: Variabel lingkungan DOCKER_HOST menimpa konteks aktif. Untuk menggunakan konteks, setel flag --context global, atau hapus variabel lingkungan DOCKER_HOST.

Kehadiran variabel lingkungan DOCKER_HOST di Shell Anda mengesampingkan titik akhir yang ditentukan oleh konteks yang Anda pilih. Dalam contoh ini, perintah docker akan selalu menargetkan instance daemon di tcp://1.2.3.4:2375 .

Masalah ini dapat diselesaikan dengan menghapus variabel DOCKER_HOST :

 $ ekspor DOCKER_HOST=

Docker sekarang akan menggunakan titik akhir yang dikonfigurasi oleh konteks aktif Anda. Ini akan menjadi soket Unix lokal default di /var/run/docker.sock kecuali jika Anda telah mengatur konteks kustom secara manual.

 $ konteks buruh pelabuhan ls
NAMA DESKRIPSI DOCKER ENDPOINT             
default * Konfigurasi berbasis DOCKER_HOST saat ini unix:///var/run/docker.sock

4. Masalah Izin

Izin pengguna yang salah pada soket Docker adalah penyebab umum lainnya dari masalah koneksi daemon. Masalah seperti ini biasanya menunjukkan pesan kesalahan yang sedikit berbeda:

 $ docker menjalankan hello-world:latest
Mendapat izin ditolak saat mencoba menyambung ke soket daemon Docker di unix:///var/run/docker.sock

Ini terjadi ketika akun pengguna Unix Anda tidak memiliki izin untuk berinteraksi dengan soket yang mengekspos Docker API. Menambahkan diri Anda ke grup docker adalah cara praktik terbaik untuk menyelesaikan masalah ini:

 $ sudo usermod -aG buruh pelabuhan $USER

Anda harus membuka jendela shell baru atau logout dan masuk kembali agar perubahan ini diterapkan. Anda sekarang harus dapat menjalankan perintah docker tanpa mengalami masalah izin.

Ringkasan

“Tidak dapat terhubung ke daemon Docker” muncul ketika CLI Docker tidak dapat berkomunikasi dengan instans daemon Docker menggunakan konfigurasi Anda saat ini. Ini sering kali karena layanan daemon Docker telah dihentikan atau dinonaktifkan. Anda juga dapat mencoba menyambung ke host Docker jarak jauh yang offline.

Anda sekarang harus mengetahui kemungkinan penyebab masalah ini dan cara umum untuk menyelesaikannya. Pecahkan masalah kesalahan dengan memeriksa pengaturan daemon Docker Anda, memulai ulang layanan Docker, dan memastikan akun pengguna Anda memiliki izin untuk berinteraksi dengan soket Docker.