Docker seguir enlace simbólico fuera del contexto


Otra pregunta de enlace simbólico de Docker. Tengo un montón de archivos que quiero copiar a todas mis compilaciones de Docker. Mi estructura dir es:

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

En el ejemplo anterior, quiero file.txt para ser copiado cuando docker construir dentro de dir1. Pero no quiero mantener múltiples copias del archivo.txt. Para 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 AGREGAR instrucciones de compilación.

Pero consigo no hay tal archivo o directorio cuando compilo 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 lo resolverá para mí (multiplataforma...). Lo intenté tar -czh . | docker build -t sin éxito.

Hay una manera de hacer que Docker siga el enlace simbólico y copie el archivo/common_files.txt en el contenedor construido?

Author: Ravi, 2015-08-07

3 answers

Eso no es posible y no se implementará. Por favor, echa un vistazo a la discusión sobre el tema 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 enlazaría los archivos host y no sus archivos locales.

 35
Author: h3nrik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-07 19:25:19

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

 2
Author: Paul Carroll,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-23 06:41:46

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

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

(O equivalente, en el directorio hijo,)

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

El Dockerfile tendrá que ser configurado para copiar/agregar con las rutas apropiadas. Dependiendo de su configuración, es posible que desee omitir un .dockerignore en el padre cosas que no quieres poner en el contexto.

 0
Author: shaunc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-24 20:21:16