Pertanyaan ini sudah dijawab, tetapi inilah informasi tambahan.
Tidak masalah jika Anda menggunakan Arch atau distribusi lain seperti Fedora atau Ubuntu, Docker menggunakan file socket untuk berkomunikasi. Ketika Anda menjalankan docker
perintah, ia menggunakan soket ini untuk berbicara dengan daemon Docker. Tentu saja, daemon harus berjalan (dan ini sering dinonaktifkan secara default), tetapi jika pengguna Anda tidak dapat mengakses soket, daemon itu juga tidak dapat berkomunikasi dengan daemon.
Anda pertama-tama akan menginstal Docker dari repositori distribusi. Beberapa orang mengunduh skrip instalasi dan mengirimkannya ke shell ( curl ... | sh
), tetapi disarankan untuk menginstalnya dari repositori sehingga dapat diperbarui dengan mudah.
Lengkungan:
# pacman -S docker
Fedora:
# dnf install docker
Seperti disebutkan di atas, daemon mungkin dinonaktifkan secara default. Jika Anda ingin menggunakan Docker, daemon harus dijalankan.
Aktifkan (jadi akan dimulai saat boot):
# systemctl enable docker
Mulai sekarang (atau reboot):
# systemctl start docker
Sekarang, secara default (jika grup buruh pelabuhan tidak ada), soket Docker dimiliki oleh root:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
Inilah sebabnya mengapa pengguna biasa tidak dapat berbicara dengan daemon buruh pelabuhan. Pengguna biasa tidak memiliki izin yang memadai untuk mengakses soket. Itu tidak dapat mencapai daemon, jadi ia menganggap itu tidak berjalan dan menunjukkan kesalahan ini:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Inilah sebabnya mengapa banyak orang memulai semua perintah Docker sebagai root, menggunakan sudo
. Tetapi seperti yang dijelaskan dalam jawaban lain, Docker memiliki mekanisme sendiri untuk itu, jadi menggunakan sudo tidak diperlukan.
Idealnya, grup yang dipanggil docker
dibuat saat memasang Docker. Namun, jika grup itu tidak ada ketika daemon dimulai, file socket dimiliki oleh root.
Dalam beberapa kasus, grup itu dulunya memiliki nama yang berbeda, seperti dockerroot
pada Fedora . Periksa grep docker /etc/group
untuk melihat apakah ada grup seperti itu di sistem Anda. Jika Anda sudah menggunakan grup itu (pengguna Anda ada di dalamnya), Anda perlu mengonfigurasi Docker untuk menggunakannya:
Di /etc/sysconfig/docker
, tambahkan -G dockerroot
(perhatikan: ini merupakan solusi, bukan solusi terbaik):
OPTIONS='--selinux-enabled -G dockerroot'
Setelah memulai ulang daemon, pengguna Anda dapat mengakses soket:
# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock
Kalau tidak, cara resmi adalah menggunakan grup yang dipanggil docker
. Jika ada, Docker akan menggunakannya secara otomatis, yaitu, mengatur grup soket ke grup itu. Jika tidak ada, yang perlu Anda lakukan hanyalah membuatnya dan memulai ulang daemon:
# groupadd docker
# systemctl restart docker
File soket akan dimiliki oleh grup itu:
# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
Pengguna Anda harus dalam docker
grup untuk dapat mengakses soket:
# usermod -aG docker (user)
Anda mungkin harus keluar dan masuk lagi (atau su - (user)
), jalankan id
untuk melihat apakah Anda berada di grup.
Anda kemudian dapat menggunakan Docker tanpa sudo / root:
$ docker version --format '{{.Server.Version}}'
1.9.1
Akhirnya, sebuah kata peringatan. Hanya pengguna tepercaya yang boleh mengendalikan daemon Docker Anda . Lihat https://docs.docker.com/engine/security/security/ .
(Tapi tentu saja, hal yang sama berlaku untuk sudo - hanya pengguna tepercaya yang boleh ada di wheel
grup.)