Problemen met Docker-toestemming geweigerd oplossen

Dagelijkse toepassingen uitvoeren met Docker kan een nachtmerrie worden wanneer je een fout tegenkomt, zoals Docker-toestemming geweigerd bij het proberen verbinding te maken. Maar maak je geen zorgen, dit artikel zal je helpen snel weer aan de slag te gaan.

In deze tutorial leer je veel manieren om de gevreesde foutmelding Docker-toestemming geweigerd op te lossen.

Vereisten

Deze tutorial omvat hands-on demonstraties. Zorg ervoor dat je het volgende hebt ingesteld om mee te doen:

  • De demo’s in deze tutorial worden uitgevoerd op Ubuntu 20.04, maar andere Linux-distributies zullen ook werken.
  • De Docker-engine, met de in de tutorial gebruikte versie 20.10.8, build 3967b7d.

Uitvoeren van verhoogde Docker-opdrachten

Er kunnen verschillende factoren leiden tot een toestemming geweigerd-fout bij het verbinden met Docker. Een van die factoren is dat je mogelijk Docker-opdrachten uitvoert zonder het sudo-commando voor te voegen. Het sudo-commando geeft je verhoogde beheerdersrechten samen met beveiligingsprivileges bij het uitvoeren van opdrachten.

Hieronder zie je de gevreesde toestemming geweigerd-fout bij het proberen een docker-opdracht uit te voeren.

Running into a permission denied error

Start uw terminal en voeg sudo toe aan de onderstaande docker-opdracht om de Docker-afbeelding hello-world te runnen. Omdat u een verhoogde opdracht uitvoert, moet u uw wachtwoord invoeren om door te gaan.

sudo docker run hello-world

U ziet een output vergelijkbaar met die hieronder getoond, wat aangeeft dat Docker correct is geïnstalleerd.

Running Elevated (sudo) Docker Commands

Het herstarten van de Docker Engine

Als het uitvoeren van verhoogde Docker-opdrachten het toestemming geweigerd fout niet oplost, controleer dan of uw Docker Engine actief is. Net als bij het uitvoeren van een docker-opdracht zonder het sudo-commando, veroorzaakt een gestopte Docker Engine de toestemming geweigerd fout. Hoe los je de fout op? Door uw Docker Engine te herstarten.

Voer de systemctl-opdracht hieronder uit om de status van de Docker Engine te bevestigen (status docker) en of deze actief is.

sudo systemctl status docker

Hieronder kunt u zien dat de Docker Engine actief is aan de hand van de geretourneerde status die een ctive (running) aangeeft.

Displaying Docker Engine status

Als de Docker Engine niet actief is, voer dan de systemctl-opdracht hieronder uit om de Docker Engine te starten (start docker).

sudo systemctl start docker

Nu, voer het hello-world Docker-commando uit zoals je deed in de sectie “Uitvoeren van verhoogde Docker-commando’s” om te controleren of de fout is opgelost.

sudo docker run hello-world

Gebruikersaccount toevoegen aan een groep met toegang voor niet-rootgebruikers

Je hebt bevestigd dat je Docker-engine werkt, maar je krijgt nog steeds een Docker-fout met toestemming geweigerd? Voeg in dat geval je gebruikersaccount toe aan een groep met toegang voor niet-rootgebruikers. Waarom? Omdat elk Docker-commando dat je uitvoert op een Linux-machine die niet in de gebruikersgroep zit, een toestemming geweigerd-fout veroorzaakt.

  1. Voer het groupadd-commando hieronder uit om een nieuwe groep genaamd docker te maken. Voer je wachtwoord in om het commando voort te zetten.
sudo groupadd docker

Als de docker-groep bestaat in de gebruikersgroep, zie je een uitvoer zoals hieronder.

Creating a New Group Named ‘docker’

2. Voer vervolgens het usermod-commando hieronder uit, waarbij de -aG-opties het commando vertellen om je gebruikersaccount (programmer) toe te voegen aan de (docker) groep. Dit zorgt ervoor dat je gebruikersaccount niet-gebruikerstoegang heeft.

sudo usermod -aG docker programmer

3. Voer het newgrp-commando hieronder uit om de huidige werkelijke groeps-ID te wijzigen naar de docker-groep.

Voer dit commando elke keer uit wanneer je Docker wilt uitvoeren als niet-rootgebruiker.

sudo newgrp docker 

4. Voer tot slot het hello-world Docker-image opnieuw uit om te bevestigen dat je de fout niet langer ziet. Als je op dit punt nog steeds een foutmelding krijgt, overweeg dan om meer toegang te geven tot het docker.sock-bestand. Het bestand docker.sock is de UNIX-socket, een manier om procesinformatie te communiceren tussen de gebruiker en het systeem, waar de Docker-daemon naar luistert als toegangspunt van de Docker API. Voer de

chmod-opdracht hieronder uit om alle gebruikers lees-/schrijftoegang (666) te verlenen aan het /var/run/docker.sock-bestand. Voer nu opnieuw het hello-world Docker-image uit om te zien of de fout is opgelost.

sudo chmod 666 /var/run/docker.sock

Bewerken van het Docker Service Unit-bestand

Als het uitvoeren van Docker als een niet-rootgebruiker niet genoeg is om de fout op te lossen, probeer dan het Docker SystemD, een servicebeheersysteem, service-unitbestand te bewerken. Het Docker-servicebestand bevat gevoelige parameters die het gedrag van de Docker-daemon kunnen wijzigen. Je kunt het standaardgedrag van het Docker-unitbestand aanpassen door een extra opdracht toe te voegen om het servicegedrag te wijzigen.

1. Voer de onderstaande opdracht uit om het Docker-service-unitbestand te openen in je favoriete teksteditor. In dit voorbeeld opent het Docker-servicebestand in de nano-teksteditor.

sudo nano /usr/lib/systemd/system/docker.service

2. Zoek het gebied met de [Service] header binnen het Docker-service-unitbestand, zoals hieronder weergegeven. Kopieer/plak de onderstaande commando’s naar het Docker-service-unitbestand en sla de wijzigingen op.

Hieronder stelt het SupplementaryGroups-commando de aanvullende Unix-groepen in waar de processen worden uitgevoerd. Tegelijkertijd ruimt het ExecStartPost-commando operaties op die worden uitgevoerd, zelfs als de service niet correct wordt opgestart.

SupplementaryGroups=docker    
ExecStartPost=/bin/chmod 666 /var/run/docker.sock
Editing the Docker Service Unit File

3. Voer nu de onderstaande commando’s uit om de Docker-service te herstarten en in te schakelen. Op deze manier kunt u de Docker-service opnieuw starten om fouten te vermijden wanneer u Docker-commando’s uitvoert.

# Laadt alle Docker-unitbestanden opnieuw en maakt de volledige afhankelijkheidsstructuur opnieuw aan.
sudo systemctl daemon-reload
# Herstart de Docker-service
sudo systemctl start docker
# Schakel Docker in om op uw computer uit te voeren.
sudo systemctl enable docker

4. Voer tot slot het hello-world-Docker-image opnieuw uit en controleer of u nog steeds de foutmelding ’toestemming geweigerd’ krijgt.

Het uitvoeren van Docker in Privilege Mode

Als laatste, maar daarom niet minder belangrijk, op de lijst van het oplossen van de Docker-toestemming geweigerde fout staat het uitvoeren van Docker in privilege-modus. Hierdoor krijgt een Docker-container roottoegang tot het systeem.

Het uitvoeren van Docker in privilege-modus is riskant en kwetsbaar voor aanvallen van hackers. Wees dus voorzichtig en voer Docker alleen uit in privilege-modus als u precies weet wat u doet.

1. Voer de onderstaande opdracht uit om alle Docker-containers op uw systeem te vermelden en krijg de ID van de container die u wilt uitvoeren.

sudo docker ls -a
Listing all Docker Containers in the System

2. Voer vervolgens de docker inspect opdracht hieronder uit om te controleren of de container die u wilt uitvoeren al in privileged-modus staat (--format='{{.HostConfig.Privileged}}'). Vervang hieronder CONTAINER_ID door de daadwerkelijke container-ID die u hebt genoteerd in stap één.

docker inspect --format='{{.HostConfig.Privileged}}' CONTAINER_ID

Als de container in privileged-modus staat, geeft de opdracht een true waarde terug naar de console. Maar als de opdracht een valse waarde retourneert, zoals hieronder wordt weergegeven, ga dan verder met de volgende stap.

Checking if a Container is in Privileged Mode

3. Voer tot slot de docker opdracht hieronder uit om de Docker-container uit te voeren in privileged-modus (--privileged hello-world).

sudo docker run --privileged hello-world

Conclusie

Doorheen deze tutorial heb je vele manieren geleerd om de Docker toestemming geweigerd fout op te lossen, van het uitvoeren van verhoogde commando’s tot het uitvoeren van Docker in privileged-modus.

Nu weet je hoe je van een fout af kunt komen bij het bouwen van Docker-gebaseerde toepassingen; misschien wil je ook je Docker-images te allen tijde schoon houden?

Source:
https://adamtheautomator.com/docker-permission-denied/