Layanan Docker jelas berjalan:
$ systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2015-12-28 19:20:50 GMT; 3 days ago
Docs: https://docs.docker.com
Main PID: 1015 (docker)
CGroup: /system.slice/docker.service
└─1015 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
$ ps wuf -u root | grep $(which docker)
root 1015 0.0 0.3 477048 12432 ? Ssl 2015 2:26 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
Namun, Docker sendiri menolak untuk berbicara dengannya:
$ docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Saya menjalankan konfigurasi Docker default , yaitu, saya belum mengubah /etc
file apa pun yang berkaitan dengan layanan ini.
Apa yang bisa menjadi masalah di sini?
arch-linux
docker
l0b0
sumber
sumber
sudo systemctl start docker
memperbaikinya, dasmon benar-benar tidak berjalan ...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:
Fedora:
Seperti disebutkan di atas, daemon mungkin dinonaktifkan secara default. Jika Anda ingin menggunakan Docker, daemon harus dijalankan.
Aktifkan (jadi akan dimulai saat boot):
Mulai sekarang (atau reboot):
Sekarang, secara default (jika grup buruh pelabuhan tidak ada), soket Docker dimiliki oleh root:
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 . Periksagrep 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):Setelah memulai ulang daemon, pengguna Anda dapat mengakses soket:
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:File soket akan dimiliki oleh grup itu:
Pengguna Anda harus dalam
docker
grup untuk dapat mengakses soket:Anda mungkin harus keluar dan masuk lagi (atau
su - (user)
), jalankanid
untuk melihat apakah Anda berada di grup.Anda kemudian dapat menggunakan Docker tanpa sudo / root:
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.)sumber
lalu keluar lalu masuk kembali
sumber
Setelah melakukan riset untuk memecahkan masalah ini pada sistem Linux saya, saya pikir saya akan menulis jawaban ini. Inilah yang saya lakukan untuk memperbaiki masalah.
Pada Fedora 22
Menginstal Docker:
Setelah menginstal Docker:
Seorang pengguna perlu ditambahkan ke grup buruh pelabuhan.
Daemon buruh pelabuhan harus dimulai
Anda dapat mengatur daemon untuk memulai saat boot
Anda dapat memverifikasi layanan buruh pelabuhan sedang berjalan
Dan satu pemeriksaan terakhir terakhir
sumber
pacman
, menggunakansystemctl
bukanservice
+chkconfig
).Jika Anda menggunakan varian Fedora 23 atau Redhat, edit
/etc/sysconfig/docker
dan modifikasi berikut iniMulai ulang buruh pelabuhan.
Pastikan Anda menambahkan grup ini ke sistem dan menambahkan diri Anda ke grup.
sumber
Perintah ini bekerja untuk saya
Saya menemukan solusinya di halaman ini jika Anda memerlukan lebih banyak dokumentasi. Mengapa kami tidak membiarkan pengguna non-root menjalankan Docker di CentOS, Fedora, atau RHEL
sumber
Jika Anda memulai mesin buruh pelabuhan dengan: sudo service docker start
Anda tidak dapat terhubung dengan pengguna normal bahkan jika Anda telah menambahkan diri Anda ke grup 'buruh pelabuhan'.
Anda cukup menghentikannya dengan: sudo service docker stop
dan mulai sebagai pengguna biasa: layanan docker mulai
sumber
docker group
sampai sekarang.sudo service start
bekerja untukku. Namun, akan mengamati jika ada sesuatu yang baru.Saya juga punya masalah yang sama. Masalahnya adalah dalam soket yang dialokasikan untuk docker-daemon dan docker-client.
Pertama, izin tidak diatur untuk buruh pelabuhan-klien di docker. Kaus kaki Anda dapat mengaturnya menggunakan
sudo usermod -aG docker $USER
Kemudian periksa file bash Anda di mana buruh pelabuhan-klien berjalan. Bagi saya itu diatur ke 0.0.0.0:23.275, sementara docker-daemon berjalan pada soket unix. (Sudah diatur dalam file konfigurasi dockerd).
Cukup komentari baris yang menyinggung dan itu akan berfungsi dengan baik.
Tetapi jika Anda ingin membuatnya bekerja pada port TCP bukan soket unix, kemudian ubah file konfigurasi dockerd, atur ke 0.0.0.0.2375, dan pertahankan baris dalam bash seperti jika ada atau atur ke 0.0. 0,0: 2375.
sumber
Ini adalah langkah-langkah yang saya ikuti untuk memperbaiki yang berikut ini
Tambahkan diri Anda ke grup buruh pelabuhan
usermod -aG docker $USER
Perbaiki izin pada docker socker dan perintah.
sudo chgrp docker /usr/bin/docker
sudo chgrp docker /var/run/docker.sock
$ ll $(which docker) -rwxr-xr-x 1 root docker 18991768 08.07.2017 22:57 /usr/bin/docker*
$ ll /var/run/docker.sock srw-rw---- 1 root docker 0 23.07.2017 10:21 /var/run/docker.sock
Tambahkan variabel ke lingkungan konfigurasi untuk perintah buruh pelabuhan
export DOCKER_HOST=unix:///var/run/docker.sock
Rest Docker
sudo systemctl restart docker
sumber