Tengo dos aplicaciones Dart que necesito dockerize. Estas dos aplicaciones usan un directorio fuente compartido.
Debido a que Docker evita agregar archivos desde carpetas fuera del directorio de contexto ( project/app1
) no puedo agregar archivos desde ../shared
ni desde shared
(el enlace simbólico dentro projects/app1
).
Estoy buscando una manera de engañar a Docker para que lo haga de todos modos.
Mi estructura de proyecto simplificada
- projects
- app1
- Dockerfile
- shared (symlink ../shared)
- otherSource
- app2
- Dockerfile
- shared (symlink ../shared)
- otherSource
- shared
- source
Podría subir Dockerfile
un nivel y ejecutar docker build
desde allí, pero luego necesito dos Dockerfiles (para app1 y app2) en el mismo directorio.
Mi idea actual era que si de alguna manera pudiera ocultar el hecho de que projects/app1/shared
es un enlace simbólico, este problema se resolvería. Verifiqué si puedo compartir projects
usando Samba y volver a montarlo en otro lugar y configurar Samba para tratar los enlaces simbólicos como carpetas normales, pero no he encontrado si esto es compatible (no tengo mucha experiencia con Samba y aún no lo he probado, solo busqué un poco) .
¿Hay alguna otra herramienta o truco que lo permita?
Preferiría no cambiar la estructura del directorio porque esto causaría otros problemas y también no copiaría los archivos.
Este problema ha surgido repetidamente en la comunidad Docker. Básicamente viola el requisito de que
Dockerfile
sea repetible si lo ejecutas o yo lo ejecuto. Por lo tanto, no esperaría esta capacidad, como se describe en este ticket: el comando Dockerfile ADD no sigue los enlaces simbólicos en el host # 1676 .Entonces debes concebir un enfoque diferente. Si observa este problema: AGREGAR para admitir enlaces simbólicos en el argumento # 6094 , un amigo nuestro de U&L ( @Patrick aka. Phemmer) proporciona una solución inteligente.
Esto le indica
extracto de la página del manual de tartar
a desreferenciar los enlaces simbólicos del directorio actual y luego canalizarlos aldocker build -
comando.fuente
cp
comando, ¿puedes explicar por qué es mejor? También creo que la tubería es confusa / demasiado complicada. ¿Por qué no simplemente colocar el comando tar sobre el comando build? Supongo que entonces sobrescribirías el directorio enlazado con el directorio real./bin/cp ../requirements.txt . && docker build ...
a un Makefile para construir el Docker, fue más fácil