Bu soru zaten cevaplandı, ancak işte size ek bir bilgi parçası.
Arch'ta veya Fedora veya Ubuntu gibi başka bir dağıtımda olsanız da, Docker iletişim kurmak için bir soket dosyası kullanır. docker
Komutları çalıştırdığınızda , Docker daemon ile konuşmak için bu soketi kullanır. Elbette, arka plan programı çalışıyor olmalı (ve genellikle varsayılan olarak devre dışıdır), ancak kullanıcı sokete erişemiyorsa, arka planınızla da iletişim kuramaz.
Docker'ı ilk önce dağıtım havuzundan kurardınız. Bazı insanlar bir yükleme betiği indirip bir shell'e ( curl ... | sh
) aktarır , ancak kolayca güncelleştirilebilmesi için depodan yüklemeniz önerilir.
Arch:
# pacman -S docker
Fedora:
# dnf install docker
Yukarıda belirtildiği gibi, arka plan programı varsayılan olarak devre dışı bırakılabilir. Docker'ı kullanmak istiyorsanız, arka plan programı çalışıyor olmalıdır.
Etkinleştir (açılışta başlatılacak):
# systemctl enable docker
Şimdi başlat (veya yeniden başlat):
# systemctl start docker
Şimdi, varsayılan olarak (docker grubu yoksa), Docker soketi root'a aittir:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
Bu nedenle düzenli bir kullanıcı liman işçisi arka plan programı ile konuşamıyor. Normal bir kullanıcının sokete erişmek için yeterli izni yok. Artalanda ulaşamadığı için çalışmadığını ve şu hatayı gösterdiğini varsayar:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Bu yüzden birçok insan tüm Docker komutlarını root olarak başlatıyor sudo
. Ancak diğer cevabında açıklandığı gibi, Docker'ın bunun için kendi mekanizması var, bu yüzden sudo kullanmak gerekli değil.
İdeal olarak, docker
Docker'ı yüklerken adlı bir grup oluşturulur. Ancak, bu grup arka plan programı başlatıldığında mevcut değilse, soket dosyası root'a aittir.
Bazı durumlarda, bu grubun dockerroot
Fedora'daki gibi farklı bir adı vardı . grep docker /etc/group
Sisteminizde böyle bir grup olup olmadığını kontrol edin . Zaten bu grubu kullanıyorsanız (kullanıcınız içinde), Docker’ı kullanmak için yapılandırmanız gerekir:
İçinde /etc/sysconfig/docker
ekle -G dockerroot
(not: bu bir çözüm, en iyi çözüm değil):
OPTIONS='--selinux-enabled -G dockerroot'
Daemon'u yeniden başlattıktan sonra, kullanıcı sokete erişebilecek:
# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock
Aksi taktirde, resmi yol denilen grubu kullanmak olacaktır docker
. Varsa, Docker otomatik olarak kullanır, yani soketin grubunu o gruba ayarlar. Eğer yoksa, yapmanız gereken tek şey onu oluşturmak ve arka plan planını yeniden başlatmak:
# groupadd docker
# systemctl restart docker
Soket dosyası bu gruba ait olacaktır:
# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
docker
Sokete erişebilmek için kullanıcı grubun içinde olmalıdır :
# usermod -aG docker (user)
Gruptan çıkıp çıkmadığınızı görmek için çıkış yapmanız ve tekrar giriş yapmanız (veya su - (user)
) yapmanız gerekebilir id
.
Daha sonra Docker’ı sudo / root kullanmadan kullanabilirsiniz:
$ docker version --format '{{.Server.Version}}'
1.9.1
Sonunda, bir uyarı kelimesi. Docker daemon'unuzu denetlemenize yalnızca güvenilir kullanıcıların izin vermesi gerekir . Https://docs.docker.com/engine/security/security/ adresine bakın .
(Ama elbette, aynı sudo için de geçerlidir - yalnızca güvenilen kullanıcılar wheel
grupta olmalıdır .)