2015-06-04 25 views
11

Desidera elencare tutte le directory del contenitore che sono volumi montati.Come elencare i volumi montati sulla finestra mobile dal contenitore

vale a dire di essere in grado di ottenere informazioni simili che ricevo da

docker inspect --format "{{ .Volumes }}" <self> 

Ma dall'interno del contenitore e senza dover docker installato in là.

Ho provato cat /proc/mounts ma non riesco a trovare un filtro adeguato per questo.

+0

provare ad aggiungere al vostro 'corsa finestra mobile comando' montare il bind di' /var/run/docker.sock -v:/var/run/docker.sock' – user2915097

+0

voglio dire senza installare finestra mobile dentro e senza correre finestra mobile interna perché equivale a fornire i privilegi sudo al contenitore interno all'host esterno. –

+2

Non c'è davvero alcun modo all'interno di un contenitore per identificare i supporti del volume Docker (senza esporre l'accesso alla Docker api). – larsks

risposta

1

Se l'host finestra mobile è OSX, i volumi montati sarò me Tipo osxfs (o fuse.osxfs). È possibile eseguire un

mount | grep osxfs | awk '{print $3}'

e ottenere un elenco di tutti i volumi montati.

Se l'host di docker è Linux (almeno Ubuntu 14+, forse altri), i volumi sembrano essere tutti su/dev, ma non su un dispositivo che si trova nel filesystem/dev del contenitore. I volumi saranno affiancati a /etc/resolv.conf,/etc/hostname e/etc/hosts. Se si avvia uno mount | grep ^/dev, si filtra uno dei file in ls /dev/*, quindi si filtrano i tre file elencati sopra, si dovrebbe lasciare i volumi host.

mount | grep ^/dev/ | grep -v /etc | awk '{print $3}'

La mia ipotesi è le specifiche possono variare da Linux a Linux. Non ideale, ma almeno possibile da capire.

+0

Funziona con il mio ospite e ospite di Ubuntu. Questo è ciò di cui avevo bisogno. Grazie! –

0

Come puoi leggere da molti dei commenti che avevi, un contenitore non è inizialmente nient'altro che una parte riservata e riservata delle risorse completamente separata dal resto della tua macchina. Non è consapevole di essere una finestra mobile e all'interno del contenitore tutto si comporta come se fosse una macchina separata. Un po 'come la matrice, immagino;) Si ottiene l'accesso al kernel della macchina host e alle sue risorse, ma ancora una volta limitato come un semplice set filtrato. Questo è fatto con l'eccezionale funzionalità "cgroups" che viene fornito con i kernel Unix/Linux.

Ora la buona notizia: ci sono molti modi per fornire le informazioni alla finestra mobile, ma è qualcosa che dovrai fornire e costruire da solo.

Il modo più semplice per pubblicare annunci è quello di montare il socket unix posizionato sull'host in /var/run/docker.sock all'interno del contenitore nella stessa posizione. In questo modo, quando si utilizza il client docker all'interno del contenitore, si sta parlando direttamente al motore di docker sul proprio host. Tuttavia, con un grande potere derivano grandi responsabilità. Questa è una bella installazione, ma non è molto sicura. Una volta che qualcuno riesce a entrare nella finestra mobile, ha accesso root al sistema host in questo modo.

Un modo migliore sarebbe quello di fornire un elenco di supporti tramite le impostazioni dell'ambiente o di aggrapparsi ad alcune convenzioni inventate per poter prevedere i supporti.

(Vi rendete conto che c'è un parametro per il montaggio, per dare monta un alias per dentro la finestra mobile?)

0

Il comando docker exec è probabilmente quello che stai cercando.

Ciò consente di eseguire comandi arbitrari all'interno di un contenitore esistente.

Ad esempio:

docker exec -it <mycontainer> bash 

Naturalmente, qualsiasi comando si esegue deve esistere nel filesystem contenitore.

#docker cp >>>> Copy files/folders between a container and the local filesystem 
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH 
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH 

alla copia completa della cartella:

docker cp ./src/build b081dbbb679b:/usr/share/nginx/html 

Nota - Questo copierà costruire directory in un contenitore di .../nginx/html/directory copiare solo i file presenti nella cartella:

docker cp ./src/build/ b081dbbb679b:/usr/share/nginx/html 

Nota - Copierà il contenuto della directory di costruzione nel container …./nginx/html/ directory

D ocker Opzioni di archiviazione:

I volumi sono memorizzati in una parte del filesystem host gestita da Docker (/ var/lib/docker/volumi/su Linux). I processi non Docker non dovrebbero modificare questa parte del filesystem. I volumi sono il modo migliore per mantenere i dati in Docker.

Quando si crea un volume, questo viene archiviato in una directory sull'host Docker. Quando si monta il volume in un contenitore, questa directory è ciò che viene montato nel contenitore. Questo è simile al modo in cui funzionano i bind mounts, tranne che i volumi sono gestiti da Docker e sono isolati dalle funzionalità di base della macchina host.

Un determinato volume può essere montato in più contenitori contemporaneamente. Quando nessun contenitore in esecuzione utilizza un volume, il volume è ancora disponibile su Docker e non viene rimosso automaticamente. È possibile rimuovere i volumi inutilizzati usando la potatura del volume della finestra mobile.

Quando si monta un volume, può essere denominato o anonimo. Ai volumi anonimi non viene assegnato un nome esplicito quando vengono montati per la prima volta in un contenitore, quindi Docker fornisce loro un nome casuale che è garantito essere univoco all'interno di un determinato host Docker. Oltre al nome, i volumi nominati e anonimi si comportano allo stesso modo.

I volumi supportano inoltre l'utilizzo di driver di volume, che consentono di archiviare i dati su host remoti o provider di servizi cloud, tra le altre possibilità.

I supporti di binding possono essere memorizzati in qualsiasi punto del sistema host. Potrebbero anche essere file di sistema o directory importanti. I processi non Docker sull'host Docker o sul contenitore Docker possono modificarli in qualsiasi momento. Disponibile sin dai primi giorni di Docker. I supporti Bind hanno funzionalità limitate rispetto ai volumi. Quando si utilizza un'installazione bind, un file o una directory sul computer host viene montato in un contenitore. Il file o la directory sono referenziati dal suo percorso completo sul computer host. Il file o la directory non è necessario che esistano già sull'host Docker. Viene creato su richiesta se non esiste ancora. I mount bind sono molto performanti, ma si basano sul filesystem della macchina host con una struttura di directory specifica disponibile. Se stai sviluppando nuove applicazioni Docker, considera invece l'utilizzo di volumi denominati. Non è possibile utilizzare i comandi CLI di Docker per gestire direttamente i bind mounts.

Un effetto collaterale dell'uso di bind mounts, nel bene o nel male, è che è possibile modificare il file system host tramite processi in esecuzione in un contenitore, tra cui la creazione, la modifica o l'eliminazione di file o directory di sistema importanti. Questa è una potente abilità che può avere implicazioni sulla sicurezza, incluso l'impatto sui processi non Docker sul sistema host.

I supporti tmpfs sono memorizzati solo nella memoria del sistema host e non vengono mai scritti nel filesystem del sistema host.

Un supporto per tmpfs non viene mantenuto su disco, sull'host Docker o all'interno di un contenitore. Può essere utilizzato da un contenitore durante la vita del contenitore, per memorizzare informazioni non persistenti o sensibili. Ad esempio, internamente, i servizi di sciame usano i comandi tmpfs per montare i segreti nei contenitori di un servizio.

Se è necessario specificare le opzioni del driver del volume, è necessario utilizzare --mount. -v oppure --volume: costituito da tre campi, separati da caratteri dei due punti (:). I campi devono essere nell'ordine corretto e il significato di ciascun campo non è immediatamente evidente. o Nel caso di volumi denominati, il primo campo è il nome del volume ed è univoco su un determinato computer host. Per i volumi anonimi, il primo campo è omesso. o Il secondo campo è il percorso in cui il file o la directory verranno montati nel contenitore. o Il terzo campo è facoltativo ed è un elenco di opzioni separate da virgole, come ro. Queste opzioni sono discusse di seguito. • --mount: costituito da più coppie chiave-valore, separate da virgole e ciascuna composta da una tupla =. La sintassi --mount è più dettagliata di -v o --volume, ma l'ordine delle chiavi non è significativo e il valore della bandiera è più facile da capire. o Il tipo di mount, che può essere binding, volume o tmpfs. Questo argomento tratta i volumi, quindi il tipo sarà sempre il volume. o La fonte del supporto. Per i volumi denominati, questo è il nome del volume. Per i volumi anonimi, questo campo è omesso. Può essere specificato come sorgente o src. o La destinazione prende come valore il percorso in cui il file o la directory verranno montati nel contenitore. Può essere specificato come destinazione, dst o destinazione. o L'opzione di sola lettura, se presente, fa sì che il supporto di associazione sia montato nel contenitore in sola lettura. o L'opzione volume-opt, che può essere specificata più volte, accetta una coppia chiave-valore costituita dal nome dell'opzione e dal suo valore.