Monte el directorio de host con un enlace simbólico dentro del contenedor de la ventana acoplable

105

Monté el contenedor con este parámetro:

-v / inicio / prueba /: / inicio / prueba

Dentro de / home / test en el host hay un enlace simbólico que apunta a una carpeta / mnt /.

Pero ese enlace, aunque se puede ver hacia dónde apunta, parece roto dentro del contenedor:

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

¿Es posible hacerlo en la ventana acoplable? No estoy seguro de si hay alguna forma de hacerlo.

Sé que puedo montar directamente donde apunta el enlace simbólico, pero me preguntaba si esto es posible.

lapinkoira
fuente
He oído hablar de problemas con la asignación de un /mntpunto final, que puede ser específico del host; lo más seguro sería evitarlo si puede.
ldg

Respuestas:

144

Los enlaces simbólicos son un gran desafío dentro de Docker. En su caso, puede montar ambos directorios:

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

Para que los enlaces simbólicos funcionen tanto dentro como fuera del contenedor, deben ser rutas absolutas y usar exactamente los mismos nombres.

En general, los enlaces simbólicos no funcionan dentro de Docker. Encontré esto de la manera más difícil.

Kemin Zhou
fuente
Qué hacer si tengo un enlace simbólico creado en Windows. La ruta puede ser c: \ (con una letra de unidad, punto y coma y una barra invertida).
Eitan
1
@Eitan Deje Windows y adopte los sistemas Linux / Unix cuando quiera trabajar con Docker
Nam G VU
Si. Me he dado cuenta de que Windows funciona con CIF, y NFS solo está en las versiones de Windows Server (por qué ese básico solo está en los servidores de Windows, solo porque cuesta, y Microsoft quiere que pague).
Eitan
Luché un día entero con esto tratando de hacer funcionar el enlace simbólico de almacenamiento de Laravel. Para la docker-composeconfiguración sería así. volumes: [./:/var/www, ./public/storage:/var/www/public/storage]. Aquí, public/storagehay un enlace simbólico a ./storage/app/public. ¡Gracias por la solución!
Jan Iwanow
19

Una solución es hacer que Docker monte el archivo original, pero use el readlink -fque imprime la ubicación real del archivo. De esta manera, aún puede hacer referencia a la ubicación del enlace simbólico en su comando, por ejemplo

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

usuario2640621
fuente
No funciona - esto da como resultado los mismos enlaces simbólicos faltantes
Ami Mahloof
En macOS: perl -MCwd -le 'print Cwd::abs_path(shift)' "$path"(de stackoverflow.com/questions/7665/… )
akauppi
7
No lo he probado en Docker, pero al jugar con readlink, parece que esto funcionará con / home / test / es un enlace simbólico, pero no si / home / test / contiene un enlace simbólico.
Justin Donnelly