run - docker tag example
Docker: agregar un archivo de un directorio padre (6)
En mi Dockerfile
tengo:
ADD ../../myapp.war /opt/tomcat7/webapps/
Ese archivo existe como ls ../../myapp.war
me devuelve el archivo correcto, pero cuando ejecuto sudo docker build -t myapp .
Tengo :
Step 1 : ADD ../../myapp.war /opt/tomcat7/webapps/
2014/07/02 19:18:09 ../../myapp.war: no such file or directory
¿Alguien sabe por qué y cómo hacerlo correctamente?
Como -f
causó otro problema, desarrollé otra solución.
- Crea una imagen base en la carpeta principal
- Agregó los archivos requeridos.
- Usé esta imagen como una imagen base para el proyecto que está en una carpeta descendiente.
El -f
no resuelve mi problema porque mi imagen onbuild
busca un archivo en una carpeta y tuvo que llamar así:
-f foo/bar/Dockerfile foo/bar
en lugar de
-f foo/bar/Dockerfile .
También tenga en cuenta que esta es la única solución para algunos casos como -f
bandera
Con docker-compose puedes establecer una carpeta de contexto:
#docker-compose.yml
version: ''3.3''
services:
yourservice:
build:
context: ./
dockerfile: ./docker/yourservice/Dockerfile
Desafortunadamente, (por razones prácticas y de seguridad, supongo), si desea agregar / copiar contenido local, debe estar ubicado en la misma ruta raíz que Dockerfile
.
De la documentación :
La ruta <src> debe estar dentro del contexto de la construcción; no puede AGREGAR ../algo / algo, porque el primer paso de una compilación de acoplador es enviar el directorio de contexto (y subdirectorios) al daemon de acoplador.
EDITAR: ahora hay una opción ( -f
) para establecer la ruta de su archivo Docker; puede usarse para lograr lo que quiere, vea la respuesta de @Boedy a continuación.
La solución para quienes usan el compositor es usar un volume apunta a la carpeta principal:
#docker-composer.yml
foo:
build: foo
volumes:
- ./:/src/:ro
Pero estoy bastante seguro de que puede hacerse jugando con volúmenes en Dockerfile .
Puedes construir Dockerfile desde el directorio principal:
docker build -t <some tag> -f <dir/dir/Dockerfile> .
Sí, puedes, sin opción -f
si quieres!
Con un pequeño truco. Inicie un servidor http en su carpeta raíz de destino, con la instrucción ADD puede acceder al archivo desde un directorio padre a través de este servidor http porque Docker build no autoriza <src> path must be inside the context of the build
Ver https://github.com/glegoux//tree/master/questions/24537340