Come montare una directory host in un contenitore Docker


618

Sto cercando di montare una directory host in un contenitore Docker in modo che eventuali aggiornamenti eseguiti sull'host si riflettano nei contenitori Docker.

Dove sto facendo qualcosa di sbagliato. Ecco cosa ho fatto:

kishore$ cat Dockerfile

FROM ubuntu:trusty
RUN apt-get update
RUN apt-get -y install git curl vim
CMD ["/bin/bash"]
WORKDIR /test_container
VOLUME ["/test_container"]

kishore$ tree
.
├── Dockerfile
└── main_folder
    ├── tfile1.txt
    ├── tfile2.txt
    ├── tfile3.txt
    └── tfile4.txt

1 directory, 5 files kishore$ pwd /Users/kishore/tdock

kishore$ docker build --tag=k3_s3:latest .

Uploading context 7.168 kB
Uploading context
Step 0 : FROM ubuntu:trusty
 ---> 99ec81b80c55
Step 1 : RUN apt-get update
 ---> Using cache
 ---> 1c7282005040
Step 2 : RUN apt-get -y install git curl vim
 ---> Using cache
 ---> aed48634e300
Step 3 : CMD ["/bin/bash"]
 ---> Running in d081b576878d
 ---> 65db8df48595
Step 4 : WORKDIR /test_container
 ---> Running in 5b8d2ccd719d
 ---> 250369b30e1f
Step 5 : VOLUME ["/test_container"]
 ---> Running in 72ca332d9809
 ---> 163deb2b1bc5
Successfully built 163deb2b1bc5
Removing intermediate container b8bfcb071441
Removing intermediate container d081b576878d
Removing intermediate container 5b8d2ccd719d
Removing intermediate container 72ca332d9809

kishore$ docker run -d -v /Users/kishore/main_folder:/test_container k3_s3:latest c9f9a7e09c54ee1c2cc966f15c963b4af320b5203b8c46689033c1ab8872a0ea

kishore$ docker run -i -t k3_s3:latest /bin/bash

root@0f17e2313a46:/test_container# ls -al
total 8
drwx------  2 root root 4096 Apr 29 05:15 .
drwxr-xr-x 66 root root 4096 Apr 29 05:15 ..

root@0f17e2313a46:/test_container# exit exit

kishore$ docker -v
Docker version 0.9.1, build 867b2a9

  • Non so come controllare la versione di boot2docker

Domande, problemi da affrontare:

  1. Come devo collegare main_folder alla cartella test_container presente all'interno del contenitore docker?
  2. Devo farlo automaticamente. Come posso farlo senza usare davvero il run -d -vcomando?
  3. Cosa succede se il boot2docker si arresta in modo anomalo? Dove sono archiviati i file Docker (a parte Dockerfile)?

2
Cordiali saluti, questo sembra essere stato risolto nella finestra mobile a partire da questo commento. Sto usando boot2docker sul mio mac. Posso usare l'opzione -v e la mia directory locale viene montata completamente nel contenitore.
Marco,

Risposte:


509

Ci sono un paio di modi in cui puoi farlo. Il modo più semplice per farlo è usare il ADDcomando dockerfile in questo modo:

ADD . /path/inside/docker/container

Tuttavia, eventuali modifiche apportate a questa directory sull'host dopo la creazione del file docker non verranno visualizzate nel contenitore. Questo perché quando si crea un contenitore, la finestra mobile comprime la directory in un .tare carica quel contesto nel contenitore in modo permanente.

Il secondo modo per farlo è il modo in cui hai provato, ovvero montare un volume. A causa del tentativo di essere il più portatile possibile, non è possibile mappare una directory host su una directory container docker all'interno di un file docker, poiché la directory host può cambiare a seconda del computer su cui si sta eseguendo. Per mappare una directory host su una directory container docker è necessario utilizzare il -vflag quando si usa docker run in questo modo:

docker run -v /host/directory:/container/directory -other -options image_name command_to_run

Ho provato così kishore $ docker -v / Users / kishore / main_folder: / test_container Docker versione 0.9.1, build 867b2a9 kishore $ docker run -v / Users / kishore / main_folder: / test_container Uso: docker run [OPTIONS] IMMAGINE [ COMANDO] [ARG ...] Esegui un comando in un nuovo contenitore -P, --publish-all = false: pubblica tutte le porte esposte sulle interfacce host -a, --attach = []: collega a stdin, stdout o stderr. -c, --cpu-share = 0: condivisioni CPU (peso relativo)
Kishore Vaishnav

2
puoi avere entrambi ADD. e -v volume mount allo stesso tempo. utilizzando app_dir predefinito se non specificare un mount host?
alexzg,

@alexzg Non credo che possiamo avere la precedenza solo sul primo. Inoltre, non sono chiaro del tuo app_dir predefinito 2 ° punto ... host mount ..?
Kishore Vaishnav,

35
Questo ha funzionato per me su mac os x con docker-machine e VirtualBox. Un avvertimento che ho scoperto per tentativi ed errori è che la directory host deve essere un percorso completo e non un percorso relativo.
jbustamovej,

25
ADDin realtà non sta "montando", copia il file nel contenitore persistendolo all'interno.
kev,

200

L'utente di questa domanda stava usando Docker version 0.9.1, build 867b2a9, ti darò una risposta per la versione docker> = 17.06.

Ciò che si desidera, mantenere la directory locale sincronizzata all'interno della directory del contenitore, si ottiene montando il volume con il tipo bind. Questo vincolerà le directory di origine (il tuo sistema) e di destinazione (nel contenitore della finestra mobile). È quasi lo stesso che montare una directory su Linux.

Secondo la documentazione Docker , il comando appropriato da montare ora è mountinvece di -v. Ecco la sua documentazione:

  • --mount: È composto da più coppie chiave-valore, separate da virgole. Ogni coppia chiave / valore assume la forma di una <key>=<value>tupla. La --mountsintassi è più dettagliata di -vo --volume, ma l'ordine delle chiavi non è significativo e il valore del flag è più facile da capire.

  • Il typedel monte, che può essere bind, volumeo tmpfs. (Useremo il bind )

  • Il sourcedel monte. Per i bind mount, questo è il percorso del file o della directory sull'host del daemon Docker. Può essere specificato come sourceo src.

  • La destinationprende come valore il percorso in cui il file o la directory saranno montati nel contenitore. Può essere specificato come destination, dsto target.

Quindi, per montare la directory corrente (sorgente) con /test_container(destinazione) useremo:

    docker run -it --mount src="$(pwd)",target=/test_container,type=bind k3_s3

Se questi parametri di mount dispongono di spazi, devi racchiuderli tra virgolette. Quando so che non lo fanno, userei `pwd`invece:

    docker run -it --mount src=`pwd`,target=/test_container,type=bind k3_s3

Dovrai anche avere a che fare con il permesso dei file, vedi questo articolo .


2
Ho upvoted la tua risposta perché mi piace come concisa è e non è sbagliato, ma si consiglia di aggiornare un po 'alla luce della mia risposta a stackoverflow.com/a/51829247/901899
rainabba

2
Immagino che la documentazione sia stata aggiornata da questa risposta, poiché in questo momento sembra raccomandare volumi piuttosto che montaggi. Vale la pena pensarci, prima di impegnarsi in qualsiasi cosa.
Sipty,

1
@Sipty potrebbe riferirsi a quanto segue: " Se stai sviluppando nuove applicazioni Docker, considera invece l'uso di volumi con nome . Non puoi utilizzare i comandi CLI Docker per gestire direttamente i mount di bind. "
Aluthren,

81

2 montaggi successivi: immagino che molti post qui potrebbero utilizzare due boot2docker, il motivo per cui non vedi nulla è che stai montando una directory da boot2docker, non dal tuo host.

In pratica sono necessari 2 supporti successivi:

il primo a montare una directory dal tuo host al tuo sistema

il secondo per montare la nuova directory da boot2docker nel tuo contenitore in questo modo:

  • 1) Montare il sistema locale boot2docker

    sudo mount -t vboxsf hostfolder /boot2dockerfolder
    
  • 2) Montare il boot2dockerfile sul contenitore Linux

    docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename
    

Quindi quando lsdentro di containerfolderte vedrai il contenuto del tuo hostfolder.


1
Migliore risposta. Devo aggiungere che (sotto Windows) la cartella host nel comando mount si riferisce a un nome di condivisione cartella. Quello che appare con un net sharecomando all'interno di un terminale di Windows (cmd). E devi aggiungere quello come cartella condivisa con la GUI di virtualBox (usando lo stesso nome se segui la mia logica). Se ometti di condividerlo, funzionerà, ma dovrai affrontare problemi con autorizzazioni e prestazioni di aggiornamento.
Kir Kanos,

come fa il comando mount a sapere l'host dove si trova / boot2dockerfolder?
Alfonsodev,

Ho ricevuto l'errore mount: unknown filesystem type 'vboxsf'
:,

"vboxsf" è il driver "file system" della cartella condivisa di VirtualBox. Deve essere configurato nella VM installando le estensioni VirtualBox. L'immagine boot2docker non deve averli installati. VirtualBox ha una funzione "dispositivo" per "inserire" le immagini ISO di VirtualBox Additions come volume virtuale. In genere puoi montarlo su mount usando mount / dev / cdrom / mnt, andando in / mnt ed eseguendo bash VBoxLinuxAdditions. Potrebbe essere necessaria l'installazione di gcc, kernel o altre dipendenze.
Andrew Wolfe,

mount.vboxsf: montaggio non riuscito con errore: nessun file o directory di montaggio simile: montaggio mymapfoldername su / boot2dockerfolder non riuscito: nessun file o directory di questo tipo
vedi

71

è possibile utilizzare l'opzione -v da cli, questa funzione non è disponibile tramite Dockerfile

docker run -t -i -v <host_dir>:<container_dir> ubuntu /bin/bash

dove host_dir è la directory dall'host che si desidera montare. non devi preoccuparti della directory del contenitore se non esiste la finestra mobile lo creerà.

Se si apportano modifiche a host_dir dal computer host (con il privilegio di root) sarà visibile al contenitore e viceversa.


6
Che esempio bello, pulito e puntuale per illustrare l'opzione di montaggio host. Potrebbe forse essere migliorato utilizzando la directory reale: docker run -t -i -v /tmp:/tmp ubuntu /bin/bashdove l'host /tmpverrà montato sul contenitore /tmp. Ora si può touch /tmp/hello-worlddal contenitore e vedere il file apparire sull'host.
Stephan Henningsen,

3
Funziona perfettamente Ma il montaggio in questo modo imposta il proprietario della directory come root e ciò si aspetta anche che il contenitore venga eseguito come root. Come montiamo la directory come non root quando il contenitore viene eseguito come non root?
Arun,

33

È possibile utilizzare la finestra mobile su OS X tramite boot2dockero qualcosa di simile.

Ho fatto la stessa esperienza - il comando è corretto ma nulla (ragionevole) è montato nel contenitore, comunque.

A quanto pare, è già spiegato nella documentazione della finestra mobile . Quando si digita docker run -v /var/logs/on/host:/var/logs/in/container ...poi /var/logs/on/hostè effettivamente mappato dal boot2dockerVM-immagine, non il vostro Mac.

Dovrai reindirizzare la cartella condivisa attraverso la tua VM al tuo host reale (il Mac nel mio caso).


1
Grazie! Questo mi ha aiutato con un problema lontano correlato. Postgres in esecuzione all'interno di Docker era legato all'IP VBox, non all'host locale, come avrebbe fatto se non fosse in esecuzione su OS X.
Peter Becich,

2
L'URL della documentazione della finestra mobile non è più valido
digitaldavenyc,

ahah il miglior scherzo di sempre .. avrebbero davvero potuto dare un suggerimento o giù di lì.
user2834172

2
Il collegamento alla documentazione è un 404
Factor Mystic,

3
Sono curioso di vedere un esempio di reindirizzamento della cartella condivisa tramite la macchina virtuale all'host reale.
Derek,

28

[AGGIORNAMENTO] A partire da ~ giugno 2017, Docker per Mac si occupa di tutte le parti fastidiose di ciò in cui devi pasticciare con VirtualBox. Ti consente di mappare praticamente tutto sul tuo host locale usando il /privateprefisso. Maggiori informazioni qui . [/AGGIORNARE]

Tutte le risposte attuali parlano di Boot2docker. Dato che ora è deprecato a favore della docker-machine, questo funziona per la docker-machine:

Innanzitutto, ssh nella finestra mobile vm e crea la cartella su cui mapperemo:

docker-machine ssh $MACHINE_NAME "sudo mkdir -p \"$VOL_DIR\""

Ora condividi la cartella su VirtualBox:

WORKDIR=$(basename "$VOL_DIR")
vboxmanage sharedfolder add "$MACHINE_NAME" --name "$WORKDIR" --hostpath "$VOL_DIR" --transient

Infine, usa di nuovo ssh nella finestra mobile e monta la cartella che abbiamo appena condiviso:

docker-machine ssh $MACHINE_NAME "sudo mount -t vboxsf -o uid=\"$U\",gid=\"$G\" \"$WORKDIR\" \"$VOL_DIR\""

Nota: per UID e GID puoi praticamente usare qualunque numero intero purché non sia già utilizzato.

Questo è testato come docker-machine 0.4.1 e docker 1.8.3 su OS X El Capitan.


1
+1. Dopo diverse ore di colpi alla testa, la tua risposta ha funzionato. Questo dovrebbe essere parte del docker-machinedocumento.
Abhijit Sarkar,

Perché non usare la -vbandiera?
igracia,

1
@igracia la -vbandiera non funziona come ti aspetteresti in OS X (o Windows). Docker viene eseguito in una macchina virtuale, quindi la cartella a cui fa riferimento -vpunta a una cartella nella macchina virtuale, non nel sistema operativo radice. Questa tecnica fa il passo successivo per mappare la cartella VM sul SO principale.
Patrick Gunderson,

1
@PatrickGunderson Nel mio caso (OS X) la cartella è nell'host, non nella VM, e funziona bene. I pedaggi Docker si occupano dell'esportazione nella VM e da lì al container.
igracia,

1
L'unica eccezione alla regola che ho citato è che la VM verrà montata automaticamente /Usersper la condivisione nella finestra mobile. Ciò significa che se i tuoi file di lavoro sono presenti ~/*, sei a posto. Se hai il tuo ambiente di sviluppo impostato per esaurire /developmento altro se /Usersnon avrai problemi docs.docker.com/engine/userguide/containers/dockervolumes
Patrick Gunderson,

27

Sto solo sperimentando come far funzionare la mia app SailsJS all'interno di un contenitore Docker per mantenere pulita la mia macchina fisica.

Sto usando il seguente comando per montare la mia applicazione SailsJS / NodeJS in / app:

cd my_source_code_folder
docker run -it -p 1337: 1337 -v $ (pwd): / app my_docker / image_with_nodejs_etc

5
Come può farlo nel Dockerfile?
orad,

23
docker run -v /host/directory:/container/directory -t IMAGE-NAME /bin/bash

docker run -v /root/shareData:/home/shareData -t kylemanna/openvpn /bin/bash

Nel mio sistema ho corretto la risposta di nhjk, funziona perfettamente quando aggiungi la -tbandiera.


Sei in grado di creare / aggiornare file da FS locale e vedere le modifiche all'interno del contenitore finestra mobile?
Avi Mehenwal,

14

Se l'host è Windows 10, invece di barra rovesciata, utilizzare la barra rovesciata -

docker run -it -p 12001:80 -v c:\Users\C\Desktop\dockerStorage:/root/sketches

Assicurarsi che l'unità host sia condivisa (C in questo caso). Nel mio caso ho ricevuto una richiesta di autorizzazione di condivisione dopo aver eseguito il comando sopra.


13

Su Mac OS, per montare una cartella /Users/<name>/projects/sul Mac alla radice del contenitore:

docker run -it -v /Users/<name>/projects/:/projects <container_name> bash

ls /projects


11

Aggiornamento luglio 2015 - boot2docker ora supporta il montaggio diretto. È possibile utilizzare -v /var/logs/on/host:/var/logs/in/containerdirettamente dal prompt del Mac, senza doppio montaggio


11

Per gli utenti di Windows 10 , è importante avere il punto di montaggio all'interno della C:/Users/directory. Ho provato per ore a farlo funzionare. Questo post ha aiutato, ma all'inizio non era ovvio poiché la soluzione per Windows 10 è un commento a una risposta accettata. Ecco come l'ho fatto:

docker run -it -p 12001:80 -v //c/Users/C/Desktop/dockerStorage:/root/sketches \
<your-image-here> /bin/bash

Quindi per testarlo, puoi fare echo TEST > hostTest.txtdentro la tua immagine. Dovresti essere in grado di vedere questo nuovo file nella cartella host locale in C:/Users/C/Desktop/dockerStorage/.


Le doppie barre sul percorso sono ciò che l'ha fatto funzionare per me. Era confuso perché l'ho usato per -v $(pwd):/var/xxprimo e ha funzionato, ma ha provocato una directory vuota. Sto correndo cyg via Babun.
Kenchilada,

Ho avuto lo stesso problema in Windows 7 durante l'utilizzo di / c / data /, spostando la directory host in / c / Users / <utente> / risolto il problema per me. Grazie.
user8675309,

1
possiamo avere un link al post che ti ha aiutato a risolvere il problema?
PBo

11

Ho avuto lo stesso problema. La mia riga di comando era simile a questa:

docker run --rm -i --name $NAME -v `pwd`:/sources:z $NAME

Il problema era con 'pwd'. Quindi l'ho cambiato in $ (pwd):

docker run --rm -i --name $NAME -v $(pwd):/sources:z $NAME

1
A cosa serve z?
hhh,

2
L'opzione z indica che il contenuto di bind mount è condiviso tra più contenitori.
Jason il

10

A partire da Docker 18-CE, è possibile utilizzare docker run -v /src/path:/container/pathper eseguire l'associazione a 2 vie di una cartella host.

C'è un grosso problema qui se stai lavorando con Windows 10 / WSL e hai Docker-CE per Windows come host e quindi strumenti client docker-ce in WSL. WSL conosce l'intero / filesystem mentre il tuo host Windows conosce solo le tue unità. All'interno di WSL, puoi usare / mnt / c / projectpath, ma se ci provi docker run -v ${PWD}:/projectpath, troverai nell'host che / projectpath / è vuoto perché sull'host / mnt non significa nulla.

Se lavori da / c / projectpath però e POI lo fai docker run -v ${PWD}:/projectpathe lo troverai nel contenitore, / projectpath rifletterà / c / projectpath in tempo reale. Non ci sono errori o altri modi per rilevare questo problema oltre a vedere supporti vuoti all'interno del tuo ospite.

È inoltre necessario essere sicuri di "condividere l'unità" nelle impostazioni Docker per Windows.


Sto riscontrando questo problema con Win10 / WSL e Docker-CE / docker-ce. Vuoto / projectpath /. Cosa intendi con "lavoro da / c / projectpath"? Ho provato a collegare / c / a / mnt / c e in esecuzione da /c/projectpathma poi ottengo l'errore bind mount source path does not exist: /host_mnt/c/projectpath.
Steven T. Snyder,

Questo link ha risolto il mio problema: support.divio.com/local-development/docker/… (Docker su Windows consente solo il montaggio da / Utenti / per impostazione predefinita)
Steven T. Snyder,

7

Ho scoperto che qualsiasi directory, che sotto la direttiva del sistema come /var, /usr, /etcnon è stato possibile montare sotto il contenitore.

La direttiva dovrebbe essere nello -vswitch di spazio dell'utente che indica al demone docker di montare la directory locale sul contenitore, ad esempio:

docker run -t -d -v /{local}/{path}:/{container}/{path} --name {container_name} {imagename}

5

boot2docker insieme a VirtualBox Guest Additions
Come montare / Utenti in boot2docker

https://medium.com/boot2docker-lightweight-linux-for-docker/boot2docker-together-with-virtualbox-guest-additions-da1e3ab2465c

tl; dr Crea il tuo boot2docker.iso personalizzato con VirtualBox Guest Additions (vedi link ) o scarica http://static.dockerfiles.io/boot2docker-v1.0.1-virtualbox-guest-additions-v4.3.12.iso e salvalo su ~ / .boot2docker / boot2docker.iso.


Ho provato a usare quell'iso e mi sono comunque imbattuto negli stessi problemi ... L'utilizzo delle indicazioni descritte in quel post mi ha aiutato a risolverlo però - in pratica ho dovuto forzare la cartella condivisa.
Jaco Pretorius,

Ho usato l'iso, mi sono imbattuto nel non aver fermato la Virtual Box VM prima di chiamare il cmd "VBoxManage sharedfolder add ...". Finalmente ha funzionato tutto, anche se grazie mille.
Emile,

Nota: il motivo per cui -v arg non funziona tramite boot2docker, è apparentemente qualcosa a che fare con il suo montaggio su boot2docker-vm e non sul tuo host reale. ecco perché suppongo che la parte Vboxmanage lo aiuti a funzionare.
Emile,

5

Come collego main_folder alla cartella test_container presente all'interno del contenitore docker?

Il tuo comando di seguito è corretto, a meno che tu non sia su un Mac usando boot2docker (a seconda dei futuri aggiornamenti) nel qual caso potresti trovare la cartella vuota. Vedi la risposta di Mattes per un tutorial sulla correzione di questo.

docker run -d -v /Users/kishore/main_folder:/test_container k3_s3:latest

Ho bisogno di fare questo correre automaticamente, come farlo senza realmente usare il comando run -d -v.

Non puoi davvero scappare dall'uso di questi comandi, sono intrinseci al modo in cui funziona la finestra mobile. Faresti meglio a metterli in uno script di shell per salvarti scrivendoli ripetutamente.

Cosa succede se boot2docker si arresta in modo anomalo? Dove sono archiviati i file docker?

Se riesci a usare -v arg e fai riferimento al tuo computer host, i file saranno al sicuro sul tuo host.

Se hai usato "docker build -t myimage". con un Dockerfile, i tuoi file verranno inseriti nell'immagine.

Le tue immagini docker, credo, sono memorizzate in boot2docker-vm. L'ho scoperto quando le mie immagini sono scomparse quando ho eliminato la VM da VirtualBox. (Nota, non so come funziona Virtualbox, quindi le immagini potrebbero essere ancora nascoste da qualche altra parte, semplicemente non visibili alla finestra mobile).


5

Ho avuto lo stesso problema. Trovato questo nella documentazione docker :

Nota: la directory host è, per sua natura, dipendente dall'host. Per questo motivo, non è possibile montare una directory host da Dockerfile, l'istruzione VOLUME non supporta il passaggio di una directory host, poiché le immagini create devono essere portatili. Una directory host non sarebbe disponibile su tutti i potenziali host.

Pertanto, il montaggio di una directory host di lettura / scrittura è possibile solo con il -vparametro nel docker runcomando, come indicano correttamente le altre risposte.


Che cos'è esattamente la directory host?
Nicolas S.Xu,

@ NicolasS.Xu Qualsiasi percorso sulla macchina host docker effettiva.
J. Scott Elblein,

5

Ecco un esempio con un percorso di Windows:

docker run -P -it --name organizr --mount src="/c/Users/MyUserName/AppData/Roaming/DockerConfigs/Organizr",dst=/config,type=bind organizrtools/organizr-v2:latest

Come nota a margine, durante tutte queste acconciature, dovendo lottare per capire e riscrivere ripetutamente i percorsi, ho deciso di montare un piccolo AutoHotkeyscript per convertire un percorso di Windows in un "Docker Windows percorso formattato " . In questo modo tutto ciò che devo fare è copiare qualsiasi percorso di Windows che voglio usare come punto di montaggio negli Appunti, premere il tasto "App" sulla tastiera e formattarlo in un formato di percorso apprezzato da Docker.

Per esempio:

Copia questo negli appunti:

C:\Users\My PC\AppData\Roaming\DockerConfigs\Organizr

premi Apps Keymentre il cursore è dove lo desideri sulla riga di comando e lo incollerà lì:

"/c/Users/My PC/AppData/Roaming/DockerConfigs/Organizr"

Risparmia molto tempo per me. Qui è per chiunque lo trovi utile.

; --------------------------------------------------------------------------------------------------------------
;
; Docker Utility: Convert a Windows Formatted Path to a Docker Formatter Path
;                   Useful for (example) when mounting Windows volumes via the command-line.
;
; By:       J. Scott Elblein
; Version:  1.0
; Date:     2/5/2019
;
; Usage:    Cut or Copy the Windows formatted path to the clipboard, press the AppsKey on your keyboard
;           (usually right next to the Windows Key), it'll format it into a 'docker path' and enter it
;           into the active window. Easy example usage would be to copy your intended volume path via
;           Explorer, place the cursor after the "-v" in your Docker command, press the Apps Key and
;           then it'll place the formatted path onto the line for you.
;
; TODO::    I may or may not add anything to this depending on needs. Some ideas are:
;           
;           - Add a tray menu with the ability to do some things, like just replace the unformatted path
;               on the clipboard with the formatted one rather than enter it automatically.
;           - Add 'smarter' handling so the it first confirms that the clipboard text is even a path in
;               the first place. (would need to be able to handle Win + Mac + Linux)
;           - Add command-line handling so the script doesn't need to always be in the tray, you could
;               just pass the Windows path to the script, have it format it, then paste and close.
;               Also, could have it just check for a path on the clipboard upon script startup, if found
;               do it's job, then exit the script.
;           - Add an 'all-in-one' action, to copy the selected Windows path, and then output the result.
;           - Whatever else comes to mind.
;
; --------------------------------------------------------------------------------------------------------------

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%

AppsKey::

    ; Create a new var, store the current clipboard contents (should be a Windows path)
    NewStr := Clipboard

    ; Rip out the first 2 chars (should be a drive letter and colon) & convert the letter to lowercase
    ; NOTE: I could probably replace the following 3 lines with a regexreplace, but atm I'm lazy and in a rush.
    tmpVar := SubStr(NewStr, 1, 2)
    StringLower, tmpVar, tmpVar

    ; Replace the uppercase drive letter and colon with the lowercase drive letter and colon
    NewStr := StrReplace(NewStr, SubStr(NewStr, 1, 2), tmpVar)

    ; Replace backslashes with forward slashes
    NewStr := StrReplace(NewStr,  "\", "/")

    ; Replace all colons with nothing
    NewStr := StrReplace(NewStr, ":", "")

    ; Remove the last char if it's a trailing forward slash
    NewStr :=  RegExReplace(NewStr, "/$")

    ; Append a leading forward slash if not already there
    if RegExMatch(NewStr, "^/") == 0
        NewStr :=  "/" . NewStr

    ; If there are any spaces in the path ... wrap in double quotes
    if RegExMatch(NewStr, " ") > 0
        NewStr :=  """" . NewStr . """"

    ; Send the result to the active window
    SendInput % NewStr 

4

Per farlo funzionare in Windows 10 ho dovuto aprire la finestra Impostazioni Docker dalla barra delle applicazioni e andare alla sezione Unità condivise .

Ho quindi selezionato la casella accanto a C. Docker ha richiesto le credenziali del desktop per ottenere l'autorizzazione a scrivere nella cartella Utenti.

Quindi ho eseguito il contenitore della finestra mobile seguendo gli esempi sopra e anche l'esempio nella pagina delle impostazioni, collegandomi al /datacontenitore.

docker run -v c:/Users/<user.name>/Desktop/dockerStorage:/data -other -options

3

Nota che in Windows dovrai fornire il percorso assoluto.

Di seguito ha funzionato per me.

docker run -t -i -v D:/projects/:/home/chankeypathak/work -p 8888:8888 jupyter/tensorflow-notebook /bin/bash

3

ho avuto gli stessi problemi, stavo provando a montare C: \ Users \ cartella sulla finestra mobile
questo è come ho fatto Docker Toolbox riga di comando

 $ docker run -it --name <containername> -v /c/Users:/myVolData <imagename>

2

Avevo lo stesso requisito per montare la directory host dal contenitore e ho usato il comando volume mount. Ma durante i test ha notato che sta creando anche file all'interno del contenitore, ma dopo alcuni scavi ha scoperto che sono solo collegamenti simbolici e il file system effettivo utilizzato dal computer host.


2

Puoi anche farlo con l' applicazione web Portainer per un'esperienza visiva diversa.

Per prima cosa tira l'immagine di Portainer:

docker pull portainer/portainer

Quindi creare un volume per Portainer:

docker volume create portainer_data

Crea anche un contenitore Portainer:

docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Sarai in grado di accedere all'app Web con il tuo browser a questo URL: " http: // localhost: 9000 ". Al primo accesso, ti verrà richiesto di impostare le credenziali di amministratore di Portainer.

Nell'app Web, seguire questi menu e pulsanti: (Contenitore> Aggiungi contenitore> Riempi impostazioni > Distribuisci contenitore)

Ho avuto difficoltà a creare un volume "mount" con Portainer e mi sono reso conto che dovevo fare clic su "bind" durante la creazione del volume del mio container. Di seguito è riportato un esempio delle impostazioni di associazione del volume che hanno funzionato per la creazione del mio contenitore con un volume montato associato all'host.

impostazioni di rilegatura del volume

PS: sto usando Docker 19.035 e Portainer 1.23.1

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.