Mis deze tijdelijke deals niet!

Hoe los je de foutmelding ‘Docker permission denied’ op in Ubuntu

Hoe los je de foutmelding ‘Docker permission denied’ op in Ubuntu

De foutmelding Docker permission denied verschijnt meestal wanneer je gebruikersaccount geen rechten heeft voor toegang tot de Docker-daemon, de bijbehorende socket of vereiste bestanden en mappen.

Docker beperkt standaard de toegang om ongeautoriseerd gebruik te voorkomen. Dat kan je workflow verstoren wanneer je ontwikkelomgevingen op Ubuntu instelt.

Je lost de Docker permission denied fout op met de volgende zes bewezen oplossingen:

  1. Gebruikersgroep aanpassen. Voeg je gebruikersaccount toe aan de docker-groep, zodat je Docker-commando’s zonder sudo uitvoert.
  2. Eigendom van bestanden en mappen corrigeren. Pas het eigendom van configuratiebestanden en gemounte volumes aan, zodat de Docker-engine gegevens kan lezen en schrijven.
  3. Socketrechten controleren. Controleer de permissies van de Docker Unix-socket om na te gaan of het communicatiekanaal niet wordt beperkt.
  4. Uitvoeringsrechten van scripts instellen. Zorg dat Dockerfile-commando’s en ENTRYPOINT-scripts uitvoerrechten hebben om opstartfouten van containers te voorkomen.
  5. Hardwaretoegang instellen. Geef containers expliciet toegang tot specifieke apparaten, zoals USB-apparaten of GPU’s, om hardwaregerelateerde permissieproblemen op te lossen.
  6. Docker-daemon herstarten. Herstart de Docker-service en je gebruikerssessie om alle wijzigingen in rechten en groepslidmaatschappen toe te passen.

Vereisten

Controleer vóór je de fout Docker permission denied oplost of je Linux-systeem voldoet aan de vereisten om administratieve instellingen te wijzigen.

  • Administratieve toegang. Je hebt sudo- of rootrechten nodig om gebruikersgroepen en bestandsrechten aan te passen.
  • Gebruikersgroep controleren. Controleer je huidige groepslidmaatschappen met het commando groups $USER.
  • Docker-installatie. Controleer of Docker is geïnstalleerd en actief is door docker –version uit te voeren.

Hoewel deze instructies gericht zijn op Ubuntu, gelden ze ook voor de meeste Debian-gebaseerde distributies.

1. Voeg je gebruiker toe aan de docker-groep

De meest voorkomende oorzaak van de fout permission denied is dat je gebruikersaccount geen deel uitmaakt van de docker-groep.

Standaard draait de Docker-daemon als een service onder root. Alleen gebruikers in de docker-groep kunnen zonder sudo met de daemon communiceren.

Voeg je huidige gebruiker toe aan de docker-groep om dit op te lossen:

sudo usermod -aG docker $USER

Dit commando voegt je gebruiker toe (-a) aan de opgegeven groep (-G). Je krijgt daarmee toegang tot de Docker-daemon socket en kunt Docker-commando’s direct uitvoeren.

Log uit en weer in om het nieuwe groepslidmaatschap toe te passen.

Controleer daarna of de wijziging is doorgevoerd:

id -nG

De uitvoer moet docker bevatten in de lijst met groepen.

Wil je direct testen zonder uit te loggen, voer dan uit:

newgrp docker

Dit commando past de groepswijziging alleen toe op je huidige terminalsessie.

2. Problemen met bestands- en maprechten oplossen

Lost het toevoegen van je gebruiker aan de groep het probleem niet op, dan kunnen onjuiste rechten op configuratiebestanden of gemounte volumes de fout veroorzaken.

Docker heeft lees- en schrijftoegang nodig tot zijn configuratiebestanden, met name config.json.

Controleer eerst de permissies van je lokale Docker-configuratiemap:

ls -l ~/.docker/

Laat de uitvoer zien dat de bestanden eigendom zijn van root in plaats van je gebruiker, wijzig dan het eigendom met het commando chown:

sudo chown -R "$USER":"$USER" "$HOME/.docker"

Dit commando wijzigt recursief het eigendom van de map .docker naar je huidige gebruiker.

Controleer daarna de rechten van gemounte volumes. Wanneer je een hostmap in een container mount, heeft de containergebruiker rechten nodig om die map te lezen en te beschrijven.

Start je bijvoorbeeld een container met een volume mount:

docker run -v ~/data:/app/data ubuntu

Controleer dan of de hostmap ~/data de juiste rechten heeft. Geef de gebruiker (u) lees- en schrijftoegang met het volgende chmod-commando:

chmod u+rw ~/data

Zo zorg je dat de eigenaar van de map voldoende rechten heeft om gegevens in het gemounte volume te beheren.

3. Docker socket-permissies controleren

De Docker-daemon communiceert via een Unix-socket op /var/run/docker.sock. Heeft deze socket onjuiste rechten, dan kan de Docker-client geen commando’s naar de daemon sturen.

Controleer de huidige socketpermissies:

ls -l /var/run/docker.sock

Je zou uitvoer moeten zien zoals hieronder:

srw-rw---- 1 root docker 0 Dec 18 10:00 /var/run/docker.sock

Deze uitvoer laat zien dat root eigenaar is van de socket en dat de docker-groep lees- en schrijftoegang heeft. Zie je dit en behoort je gebruiker tot de docker-groep, dan is de socketconfiguratie correct.

Is de groep geen docker of wijken de permissies af, wijzig ze dan niet handmatig door chmod 666 /var/run/docker.sock uit te voeren, zeker niet in productieomgevingen.

Dit commando vormt een ernstig beveiligingsrisico: alle systeemgebruikers krijgen toegang tot de Docker-daemon en daarmee in feite root-toegang tot de host.

Vertrouw in plaats daarvan op groepslidmaatschap door je gebruiker toe te voegen aan de docker-groep. De Docker-daemon stelt bij het opstarten automatisch de juiste socketrechten in.

4. Dockerfile- of ENTRYPOINT-scriptrechten herstellen

De fout Docker permission denied kan ook binnen een container optreden wanneer het entrypoint-script geen uitvoerrechten heeft.

Dit gebeurt vaak wanneer je scripts verplaatst van een niet-Linuxbestandssysteem, zoals Windows, naar de Docker build context. Daarbij kan de uitvoerbare bit verloren gaan.

Gebeurt dit, dan start de container niet omdat het script in de ENTRYPOINT– of CMD-instructie niet kan worden uitgevoerd.

Voeg een RUN-instructie toe na de COPY-regel in je Dockerfile om dit op te lossen. Daarmee geef je het script uitvoerrechten.

RUN chmod +x /usr/local/bin/entrypoint.sh

Zo blijft het script uitvoerbaar, ongeacht de rechten op de hostmachine. Deze stap is vaak nodig wanneer je aangepaste images bouwt die afhankelijk zijn van opstartscripts.

5. Apparaattoegang verlenen aan Docker-containers

Moet een container communiceren met hardware, zoals een USB-station, webcam of GPU, dan kun je een permission denied-fout zien voor een apparaatpad zoals /dev/ttyUSB0.

Containers draaien standaard geïsoleerd en hebben geen toegang tot hostapparaten. Geef expliciet een apparaat door bij het starten van de container met de –device-vlag:

docker run --device=/dev/ttyUSB0 my-image

Heeft de container ruimere rechten nodig, maar geen volledige apparaattoegang, voeg dan specifieke Linux-capabilities toe met de –cap-add-vlag:

docker run --cap-add=SYS_ADMIN my-image

Deze aanpak volgt het principe van minimale rechten: ken alleen de capabilities toe die de container nodig heeft. Veelgebruikte capabilities zijn NET_ADMIN voor netwerkconfiguratie en SYS_PTRACE voor debugging.

Zijn specifieke apparaten of capabilities niet voldoende, dan kun je de –privileged-vlag gebruiken:

docker run --privileged my-image

Deze optie geeft de container volledige toegang tot alle hostapparaten en schakelt de meeste beveiligingsisolatie uit.

Containers die in deze modus starten, kunnen rootniveau-toegang tot het hostsysteem krijgen. Gebruik –privileged alleen in vertrouwde lokale ontwikkelomgevingen of wanneer er geen veiliger alternatief is.

Geef voor productieworkloads altijd de voorkeur aan –device voor specifieke hardware of –cap-add voor specifieke capabilities.

6. Docker herstarten en je configuratie testen

Herstart de Docker-service nadat je wijzigingen in gebruikersgroepen of rechten hebt toegepast, zodat de daemon de bijgewerkte configuratie herkent.

Herstart Docker met systemctl:

sudo systemctl restart docker

Controleer daarna of de fout is opgelost door de standaard hello-world-container zonder sudo te starten:

docker run hello-world

Wordt de image gedownload en uitgevoerd en zie je een welkomstbericht, dan is het permissieprobleem opgelost.

Blijft de fout optreden, herstart dan het volledige systeem zodat alle groepslidmaatschappen en sessiewijzigingen worden toegepast:

sudo reboot

Wat moet je nu leren in Docker?

Nu je Docker-installatie zonder permissiefouten werkt, kun je veilig en met vertrouwen met containers werken.

Omgevingsproblemen oplossen is een belangrijke eerste stap in je Docker-traject. Zo richt je je op het bouwen en uitrollen van applicaties in plaats van op configuratieproblemen.

Wil je verder verdiepen in de kernconcepten van Docker, lees dan onze volledige Docker-tutorial. Daarin komen imagebeheer, containerlevenscycli, Docker Compose, datapersistentie en containernetwerken aan bod.

Alle tutorials op deze website voldoen aan de strenge edactionele standaarden en waarden van Hostinger.

Author
De auteur

Faradilla Ayunindya

Faradilla, ook bekend als Ninda, is Content Marketing Specialist bij Hostinger met meer dan vijf jaar ervaring en een achtergrond van tien jaar als taalkundige. Ze maakt technologie toegankelijk door complexe onderwerpen om te zetten in duidelijke, makkelijk te volgen tutorials. In haar vrije tijd volgt ze graag de nieuwste trends in tech en digitale marketing, of kijkt ze naar grappige dierenvideo’s. Je kunt met haar verbinden via LinkedIn.

Wat onze klanten zeggen

Leave a reply

Please fill the required fields.Please accept the privacy checkbox.Please fill the required fields and accept the privacy checkbox.

Thank you! Your comment has been successfully submitted. It will be approved within the next 24 hours.