Cara Memecahkan Masalah Kesalahan "Tidak Dapat Terhubung ke Docker Daemon"
Diterbitkan: 2022-08-14Docker 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.