Skip to content

Docker-containers en -volumes

Het bestandssysteem van een Docker-container is in een venster te doorzoeken als elke andere map, en een Docker-volume ook. Kies Verbinden met Docker… in het menu Netwerk, of klik op de knop Docker in de schijvenbalk, en de engine verschijnt in het actieve venster.

Het is een plug-in en wordt uitgeschakeld geleverd. Zet hem aan bij Configuratie ▸ Plug-ins…. Hij begint uitgeschakeld omdat een verbinding met de Docker-daemon op uw Mac dezelfde rechten heeft als u — zie Waar hij bij kan verderop.

Wat u ziet

Het bovenste niveau bestaat uit drie mappen:

  • Compose Projects — elke container die door Docker Compose is gestart, gegroepeerd per project en daarna per service. Een service met één container is die container: my-stack/backend/etc is de /etc van de backend. Een service met meerdere houdt daarvoor een niveau, één map per container.
  • Standalone Containers — al het overige, actief of niet.
  • Volumes — elk Docker-volume, als een schijf op zichzelf.

Daaronder bevindt u zich in een echt bestandssysteem: F3 toont een bestand, F4 bewerkt het, F5 kopieert het naar het andere venster, F7 maakt een map. Het andere venster kan van alles zijn — een lokale map, een archief, een S3-bucket.

De groepering wordt gelezen uit de labels die Compose op zijn eigen containers en volumes zet, dus klopt ze ook voor een stack waarvan de docker-compose.yml allang niet meer op deze machine staat.

Volumes worden bewust apart vermeld. Een volume overleeft de container die het maakte, kan door meerdere containers worden gedeeld en bevat meestal precies de gegevens waarvoor u kwam. Een volume dat op dit moment nergens is gekoppeld, blijft doorzoekbaar.

Kolommen

Klik met de rechtermuisknop op de kolomkop van een venster om de eigen kolommen van de provider toe te voegen:

  • Status — ● running, ○ stopped, ◌ paused, ! restarting.
  • Toegang — RW, RO bij een alleen-lezen rootfs of koppeling, VOL voor een Docker-volume, BIND voor een van uw mappen in de container, TMP voor een tmpfs.
  • Image, ID.
  • Koppeling — bij een map die in werkelijkheid een koppeling is: wat het is. Volume: my-stack_db-data, of het hostpad achter een bind. Zo vindt u welk volume onder Volumes de gegevens van een container bevat.

Gestopte containers

Gestopte containers worden getoond en hun bestandssystemen kunnen worden gelezen en beschreven. De bestands-API van Docker antwoordt ook voor een container die al een maand niet heeft gedraaid, en dat is wat dit op een schijf laat lijken in plaats van op een procestabel.

Twee dingen vereisen een werkelijk draaiende container: verwijderen en hernoemen. De Docker Engine-API kent voor geen van beide een bewerking — de enige manier om een bestand in een container te verwijderen of te verplaatsen is er iets in uit te voeren — dus bij een gestopte container worden beide geweigerd in plaats van voorgewend.

Wat u ervan mag verwachten

Schrijfacties komen binnen als root, verwijderingen lopen als de eigen gebruiker van de container. Dat is Dockers indeling, geen keuze die hier is gemaakt: een bestand naar binnen kopiëren gaat via de archief-API van de engine, die als root schrijft; verwijderen of hernoemen voert een opdracht uit in de container, onder de gebruiker die het image heeft ingesteld. Een verwijdering kan daardoor met toegang geweigerd mislukken bij een bestand dat u even daarvoor wél kon kopiëren. Peach Commander omzeilt dat niet door als root te werken — het meldt u wat de container zei.

Een alleen-lezen container of koppeling weigert schrijfacties en meldt dat als een rechtenfout, niet als een mislukking.

Een symbolische koppeling lezen leest waar hij naar wijst. Het venster toont hem nog steeds als koppeling in de kolom Attr; F3 toont de inhoud van het doel in plaats van een leeg bestand.

De hoofdmap van een grote gestopte container is mogelijk niet op te vragen. Docker heeft geen aanroep die een map opsomt. Een map lezen betekent haar als archief opvragen, en dat bevat alles eronder — bij een gestopte container op basis van een volwaardig image kan dat tientallen gigabytes zijn, en dan wordt de opsomming geweigerd in plaats van alles te lezen. Dieper gelegen mappen hebben er geen last van, en een draaiende container evenmin: een map die te groot is om als archief te lezen wordt door de container zelf opgesomd. Wilt u uitsluitend de archiefweg, zie dan de instelling hieronder.

Een hele container naar buiten kopiëren kopieert zijn volledige bestandssysteem — inclusief /proc en /dev. Kopieer de map die u nodig hebt, niet /.

Waar hij bij kan

De plug-in praat met dezelfde engine die u vanuit een terminal zou bereiken: DOCKER_HOST als u die hebt gezet, anders uw huidige docker context, anders de gebruikelijke sockets van Docker Desktop, Colima, Rancher Desktop, Lima en Podman. Podman werkt omdat het dezelfde API aanbiedt.

Toegang tot een Docker-daemon betekent doorgaans verstrekkende toegang tot de machine waarop hij draait. De plug-in heeft precies uw rechten en vraagt er geen meer: hij bewaart geen inloggegevens, raakt Dockers eigen mappen op uw schijf nooit aan en voert geen bevoorrechte handelingen namens u uit.

Het enige dat hij aanmaakt is een wegwerpcontainer — en alleen om een volume te bereiken dat geen bestaande container koppelt, want een volume is alleen zichtbaar van binnenuit iets dat het koppelt. Hij wordt nooit gestart, draagt het label van Peach Commander en wordt verwijderd zodra u de schijf verlaat.

Acties op een container of een volume

Een rechterklik op een container of een volume biedt in het submenu Docker wat een schijf alleen niet kan zeggen:

  • Inspect — alles wat de engine ervan weet, als opgemaakte JSON, in een venster waarin u kunt scrollen en selecteren.
  • Show Logs — de laatste 500 regels die de container heeft geschreven.
  • Show Mounts — elke koppeling die hij draagt, wat elk ervan is en of erin geschreven kan worden.
  • Copy ID — de volledige id van de container, of de naam van het volume, op het klembord. De volledige id, niet de twaalf tekens van de ID-kolom: dit is bedoeld om in een docker-opdracht te plakken, en een korte id is een voorvoegsel dat kan ophouden uniek te zijn.
  • Jump to Volume — op een map die in werkelijkheid een volume is, naar dat volume onder Volumes gaan. Dat is de andere helft van de kolom Koppeling: de kolom noemt het volume, dit brengt u erheen.
  • Open Compose Project — naar het project gaan waar de container bij hoort.
  • Start, Stop, Restart, Pause, Unpause — deze veranderen de container in plaats van hem te lezen, dus vragen ze eerst. Start is ook de uitweg uit de twee weigeringen hierboven: verwijderen en hernoemen vereisen een draaiende container.

De items verschijnen alleen binnen een Docker-schijf; boven een eigen map zijn ze er helemaal niet.

Het logboek is ook een bestand. In de hoofdmap van elke container staat docker-logs.txt — geen bestand in de container: het lezen ervan vraagt de engine om het logboek. F3 erop opent het in de weergave, dus de zoekfunctie, het springen naar een regel en de keuze van codering gelden allemaal, wat een eigen venster niet kan geven. Een container die werkelijk een bestand met die naam meebrengt, toont het zijne, en naar het virtuele kan niets worden geschreven.

Instellingen

Configuratie ▸ Instellingen ▸ Docker bevat dit alles. Dezelfde waarden staan in een klein bestand op ~/Library/Application Support/PeachCommander/Docker/docker.ini, dat u bewerkt als u een machine vanuit een script inricht:

  • Endpoint — een adres dat in plaats van het gevonden adres wordt gebruikt.
  • ExecFallback — 0 laat de plug-in uitsluitend Dockers archief-API gebruiken: hij voert dan nooit iets uit in een container, ten koste van het opsommen van een zeer grote map, verwijderen en hernoemen.
  • ProbeBudgetMB, MaxBudgetMB, MaxBudgetSeconds — hoeveel van het archief van een map het waard is te lezen voordat wordt teruggevallen of opgegeven.
  • HelperImage — het image waarvan de bovengenoemde wegwerpcontainer wordt gemaakt (standaard een willekeurig image dat al aanwezig is).
  • ShowAnonymousVolumes — 0 verbergt de volumes waaraan Docker een lange hash als naam gaf omdat niemand anders ze een naam gaf.

Niet in deze versie

Externe engines via SSH of TLS, een interactieve shell, en images als alleen-lezen bestandssystemen.