GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Odstraňování problémů s povolením Docker Denied Problems

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.

  1. Spusťte groupadd příkaz níže k vytvoření nové skupiny s názvem docker . 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é?


Docker
  1. Jak spustit příkaz na spuštěném kontejneru Docker

  2. Proč kontejner dockeru zobrazí výzvu Permission denied?

  3. chyba připojení 13 =Oprávnění odepřeno

  1. Odstraňování problémů s hardwarem v Linuxu

  2. Problémy s Dockerem v Ubuntu 20.04?

  3. Jak používat příkaz Docker Inspect

  1. Jak opravit chybu Docker Permission Denied Error na Ubuntu

  2. Užitečné příklady příkazu Docker ps

  3. Chyba příkazu „docker images“ – „Oprávnění odepřeno“