Spouštění aplikací s Dockerem jako každodenní rutina se může stát noční můrou, když při pokusu o připojení narazíte na chybu, jako je odepření oprávnění Dockeru. Ale nebojte se, tento článek vám pomůže rychle začít běhat.
V tomto tutoriálu se naučíte mnoho způsobů, jak vyřešit obávanou chybovou zprávu Docker povolení odepřeno.
Předpoklady
Tento tutoriál obsahuje praktické ukázky. Chcete-li pokračovat, ujistěte se, že máte na svém místě následující:
- Ukázky v tomto tutoriálu běží na Ubuntu 20.04, ale budou fungovat i jiné distribuce Linuxu.
- Motor Docker s výukovým programem verze 20.10.8, sestavení 3967b7d.
Spouštění příkazů Elevated Docker
Mnoho faktorů může vést k odepření oprávnění chyba při připojování k Dockeru. Jedním z těchto faktorů je, že můžete spouštět příkazy Dockeru bez přidání sudo
příkaz. sudo
příkaz je to, co vám dává zvýšená práva správce spolu s bezpečnostními oprávněními při spouštění příkazů.
Níže můžete vidět obávané oprávnění odepřeno chyba při pokusu o spuštění docker
příkaz.
Spusťte terminál a před něj přidejte sudo
na docker
příkaz níže ke run
hello-world
Obrázek dockeru. Protože spouštíte zvýšený příkaz, budete muset zadat své heslo, abyste mohli pokračovat.
sudo docker run hello-world
Uvidíte výstup podobný tomu, který je zobrazen níže, což znamená, že Docker je nainstalován správně.
Restartování Docker Engine
Pokud spuštění zvýšených příkazů Dockeru nevyřeší oprávnění odepřeno chyba, ověřte, že váš Docker Engine běží. Podobně jako spuštění docker
příkaz bez sudo
příkaz, zastavený Docker Engine spustí oprávnění odepřeno chyba. Jak chybu opravíte? Restartováním modulu Docker.
Spusťte systemctl
příkaz níže pro potvrzení stavu Docker Engine (status docker
) a pokud běží.
sudo systemctl status docker
Níže můžete zjistit, že Docker Engine běží podle vráceného stavu, který ukazujeaktivní (běží).
Pokud Docker Engine není aktivní, spusťte systemctl
příkaz níže ke spuštění Docker Engine (start docker
).
sudo systemctl start docker
Nyní spusťte příkaz hello-world Docker jako v části „Spouštění zvýšených příkazů Dockeru“ a ověřte, zda je chyba vyřešena.
sudo docker run hello-world
Přidání uživatelského účtu do skupiny s přístupem jiného uživatele než root
Potvrdili jste, že váš Docker engine funguje, ale stále dostáváte oprávnění odepřeno pro Docker chyba? Pokud ano, musíte svůj uživatelský účet přidat do skupiny s přístupem jiného uživatele než root. Proč? Protože jakýkoli příkaz Docker, který spustíte na počítači se systémem Linux, který není ve skupině uživatelů, spustí oprávnění odepřeno chyba.
- Spusťte
groupadd
příkaz níže k vytvoření nové skupiny s názvemdocker
. Chcete-li pokračovat ve spuštění příkazu, zadejte své heslo.
sudo groupadd docker
Pokud skupina dockerů ve skupině uživatelů existuje, uvidíte výstup podobný tomu níže.
2. Dále spusťte usermod
níže, kde je -aG
možnosti říkají příkazu, aby přidal váš uživatelský účet (programmer
) do (docker
) skupina. Tento příkaz způsobí, že váš uživatelský účet bude mít neuživatelský přístup.
sudo usermod -aG docker programmer
3. Spusťte newgrp
příkazem níže změníte aktuální ID skutečné skupiny na docker
skupina.
Tento příkaz spusťte pokaždé, když chcete spustit Docker jako uživatel bez oprávnění root.
sudo newgrp docker
4. Nakonec znovu spusťte obrázek hello-world Docker, abyste potvrdili, že se již chyba nezobrazuje. Pokud se v tomto okamžiku stále zobrazuje chyba, zvažte poskytnutí většího přístupu k souboru docker.sock. docker.sock soubor je UNIX socket, způsob, jak komunikovat informace o procesu mezi uživatelem a systémem, kterému démon Docker naslouchá jako vstupní bod rozhraní Docker API.
Spusťte chmod
níže uvedeným příkazem povolíte všem uživatelům čtení/zápis (666
) přístup k /var/run/docker.sock
soubor. Nyní znovu spusťte obrázek hello-world Docker, abyste zjistili, zda je chyba vyřešena.
sudo chmod 666 /var/run/docker.sock
Úprava souboru Docker Service Unit
Pokud spuštění Dockeru jako uživatel bez oprávnění root k odstranění chyby nestačí, zkuste upravit soubor Docker SystemD, systém řízení služeb, soubor servisní jednotky. Soubor služby Docker obsahuje citlivé parametry, které mohou změnit chování démona Docker. Výchozí chování souboru jednotek Docker můžete upravit přidáním dalšího příkazu, který změní výchozí chování služby.
1. Spuštěním příkazu níže otevřete soubor servisní jednotky Docker ve svém oblíbeném textovém editoru. V tomto příkladu se soubor služby Docker otevře v textovém editoru nano.
sudo nano /usr/lib/systemd/system/docker.service
2. Najděte oblast pomocí [Služby] záhlaví uvnitř souboru servisní jednotky Docker, jak je znázorněno níže. Zkopírujte/vložte níže uvedené příkazy do souboru servisní jednotky Docker a uložte změny.
Níže SupplementaryGroups
příkaz nastaví doplňkové skupiny Unixu na místo, kde se procesy provádějí. Zároveň ExecStartPost
příkaz vyčistí operace, které se provedou, i když se služba nespustí správně.
SupplementaryGroups=docker
ExecStartPost=/bin/chmod 666 /var/run/docker.sock
3. Nyní spusťte níže uvedené příkazy a restartujte a povolte službu Docker. Díky tomu můžete službu Docker spustit znovu, abyste se vyhnuli chybám při spouštění příkazů Dockeru.
# Reloads all the Docker unit files and recreates the entire dependency tree.
sudo systemctl daemon-reload
# Restarts the Docker service
sudo systemctl start docker
# Enable the Docker to run on your computer.
sudo systemctl enable docker
4. Nakonec znovu spusťte hello-world
Docker image a zjistěte, zda se stále zobrazuje chyba oprávnění odepřeno.
Spuštění Dockeru v režimu oprávnění
V neposlední řadě je na seznamu oprav chyby Docker povolení odepřeno spuštění Dockeru v privilegovaném režimu. Pokud tak učiníte, poskytnete kořenovému kontejneru Docker přístup k systému.
Spuštění Dockeru v privilegovaném režimu je riskantní a zranitelné vůči útokům hackerů. Buďte tedy opatrní a spouštějte Docker v privilegovaném režimu, pouze když přesně víte, co děláte.
1. Spuštěním níže uvedeného příkazu zobrazíte seznam všech kontejnerů Docker ve vašem systému a získáte ID kontejneru, který chcete spustit.
sudo docker ls -a
2. Dále spusťte docker inspect
příkaz níže a zkontrolujte, zda je kontejner, který chcete spustit, již v privilegovaném režimu (--format='{{.HostConfig.Privileged}}'
). Nahraďte CONTAINER_ID
níže se skutečným ID kontejneru, které jste si poznamenali v prvním kroku.
docker inspect --format='{{.HostConfig.Privileged}}' CONTAINER_ID
Pokud je kontejner v privilegovaném režimu, příkaz vrátí true hodnotu do konzole. Pokud však příkaz vrátí falešnou hodnotu, jak je znázorněno níže, přejděte k dalšímu kroku.
3. Nakonec spusťte docker
příkaz níže ke run
kontejner Docker v privilegovaném režimu (--privileged hello-world
).
sudo docker run --privileged hello-world
Závěr
V tomto tutoriálu jste se naučili mnoho způsobů, jak vyřešit oprávnění odepřeno Dockeru chyba, od spouštění zvýšených příkazů po spouštění Dockeru v privilegovaném režimu.
Nyní víte, jak se zbavit chyby při vytváření aplikací využívajících Docker; možná také chcete udržovat své obrazy Docker vždy čisté?