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.


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.


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/ ...


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.