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.

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.
U ziet een output vergelijkbaar met die hieronder getoond, wat aangeeft dat Docker correct is geïnstalleerd.

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.
Hieronder kunt u zien dat de Docker Engine actief is aan de hand van de geretourneerde status die een ctive (running) aangeeft.

Als de Docker Engine niet actief is, voer dan de systemctl
-opdracht hieronder uit om de Docker Engine te starten (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.
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.
- Voer het
groupadd
-commando hieronder uit om een nieuwe groep genaamddocker
te maken. Voer je wachtwoord in om het commando voort te zetten.
Als de docker-groep bestaat in de gebruikersgroep, zie je een uitvoer zoals hieronder.

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.
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.
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.
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.
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.

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.
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.

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.
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.

3. Voer tot slot de docker
opdracht hieronder uit om de Docker-container uit te voeren in privileged-modus (--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/