Montare la directory host con un collegamento simbolico all'interno del contenitore docker


105

Ho montato il container con questo parametro:

-v / home / test /: / home / test

All'interno di / home / test nell'host c'è un collegamento simbolico che punta a una cartella / mnt /.

Ma quel collegamento, sebbene possa essere visto dove sta puntando, sembra interrotto all'interno del contenitore:

root@f93f72b45013:/var/www/html# cd /home/test/ 
root@f93f72b45013:/home/test# ls -lrt 
total 11956 
lrwxrwxrwx. 1 root root 40 Jul 20 15:55 file -> /mnt/mountedfile/
root@f93f72b45013:/home/test# ls -lrt file/*
ls: cannot access file/*: No such file or directory

È anche possibile farlo in finestra mobile? Non sono sicuro che ci sia un modo per farlo.

So che posso semplicemente montare direttamente dove punta il collegamento simbolico, ma mi stavo solo chiedendo se fosse possibile.


Ho sentito parlare di problemi di mappatura su un /mntendpoint, che potrebbe essere specifico dell'host: la cosa più sicura sarebbe evitarlo se puoi.
LDG

Risposte:


144

I collegamenti simbolici sono una grande sfida all'interno di finestra mobile. Nel tuo caso puoi montare entrambe le directory:

-v /home/test/:/home/test -v /mnt/mountedfile:/mnt/mountedfile

Affinché i collegamenti simbolici funzionino sia all'interno che all'esterno del contenitore, devono essere percorsi assoluti e utilizzare esattamente gli stessi nomi.

In generale, i collegamenti simbolici non funzionano all'interno di finestra mobile. L'ho trovato nel modo più duro.


Cosa fare se ho un collegamento simbolico creato in Windows. Il percorso può essere c: \ (con una lettera di unità, punto e virgola e una barra rovesciata)?
Eitan

1
@Eitan Lascia Windows e abbraccia i sistemi Linux / Unix quando vuoi lavorare con Docker
Nam G VU

Sì. Ho capito che Windows funziona con CIF e NFS è solo sulle versioni di Windows Server (perché quella base è solo sui server Windows - solo perché costa e Microsoft vuole che tu paghi).
Eitan

Ho lottato un giorno intero con questo tentativo di far funzionare il collegamento simbolico di archiviazione Laravel. Per la docker-composeconfigurazione sarebbe così. volumes: [./:/var/www, ./public/storage:/var/www/public/storage]. Ecco public/storageun collegamento simbolico a ./storage/app/public. Grazie per la soluzione!
Jan Iwanow,

19

Una soluzione è fare in modo che Docker monti il ​​file originale, ma usa readlink -fche stampa la posizione effettiva del file. In questo modo, puoi ancora fare riferimento alla posizione del collegamento simbolico nel tuo comando, ad es

docker run -it -v $(readlink -f /home/test/):/home/test/ ...


Non funziona - questo si traduce negli stessi
collegamenti

Su MacOS: perl -MCwd -le 'print Cwd::abs_path(shift)' "$path"(da stackoverflow.com/questions/7665/... )
akauppi

7
Non l'ho testato in Docker, ma giocando con readlink, sembra che funzionerà con / home / test / è un collegamento simbolico, ma non se / home / test / contiene un collegamento simbolico.
Justin Donnelly
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.