tag run remove library docker symlink dockerfile symlink-traversal

run - docker tag



Docker sigue el enlace simbólico fuera del contexto (4)

Otra pregunta más del enlace simbólico de Docker. Tengo un montón de archivos que quiero copiar en todas mis compilaciones de Docker. Mi estructura de directorios es:

parent_dir - common_files - file.txt - dir1 - Dockerfile - symlink -> ../common_files

En el ejemplo anterior, quiero que se copie file.txt cuando docker compile dentro de dir1. Pero no quiero mantener varias copias de file.txt. Según este enlace, a partir de la versión 0.10 de Docker, la compilación de Docker debe

Siga los enlaces simbólicos dentro de la raíz del contenedor para ADD instrucciones de compilación.

Pero no obtengo tal archivo o directorio cuando construyo con cualquiera de estas líneas en mi Dockerfile:

ADD symlink /path/dirname o ADD symlink/file.txt /path/file.txt

La opción de montaje NO me lo resolverá (plataforma cruzada ...). Intenté tar -czh . | docker build -t tar -czh . | docker build -t tar -czh . | docker build -t sin éxito.

¿Hay alguna manera de hacer que Docker siga el enlace simbólico y copie common_files / file.txt en el contenedor integrado?


Eso no es posible y no se implementará. Eche un vistazo a la discusión sobre el problema de github # 1676 :

No permitimos esto porque no es repetible. Un enlace simbólico en su máquina no es lo mismo que mi máquina y el mismo Dockerfile produciría dos resultados diferentes. También tener enlaces simbólicos a / etc / paasswd causaría problemas porque vincularía los archivos host y no sus archivos locales.


Para cualquier otra persona con este problema, consulte este enlace . Personalmente, opté por la solución "construir una imagen base común" y funciona de manera brillante.


Una posibilidad es ejecutar la compilación en el directorio principal, con:

$ docker build [tags...] -f dir1/Dockerfile .

(O equivalente, en el directorio secundario)

$ docker build [tags...] -f Dockerfile ..

El Dockerfile deberá configurarse para copiar / agregar con las rutas apropiadas. Dependiendo de su configuración, es posible que desee un .dockerignore en el padre para omitir las cosas que no desea que se pongan en el contexto.


en lugar de usar enlaces sim, es posible resolver problemas administrativamente simplemente moviendo archivos de sitios disponibles a sitios habilitados en lugar de copiar o hacer enlaces sim.

por lo que la configuración de su sitio estará en una copia solo en la carpeta site_available si se detuvo o algo así o en sites_enabled si debería usarse