Tengo un Dockerfile que tiene, entre otras directivas, las siguientes:
FROM node:alpine RUN cd /tmp && \ # several lines downloading/installing packages from zips ... ADD src/config.json /myapp/config.json WORKDIR /myapp
Esto está diseñado para ejecutarse desde la raíz del repositorio de la aplicación para construir el contenedor acoplable. El comando RUN
se coloca temprano porque obtiene las dependencias de la aplicación y esto lógicamente debería ocurrir al principio del proceso. (También está encadenando un montón de comandos para mantener bajo el número de capas). Sin embargo, el comando ADD
espera estar en la misma ubicación que el Dockerfile, la raíz del repositorio.
Dado eso, ¿hay alguna manera de 'recordar' desde dónde comenzó la compilación de la ventana acoplable y usar esto para orientar el ADD
? (Específicamente, ejecutar esto en un entorno de desarrollo local tendrá un whereami
diferente cuando se construya que mi servidor de compilación). ¿O estoy atascado intercalando estos comandos, primero copiando la configuración, luego descargando dependencias, etc.?
Cuando construyo, estoy haciendo esto desde el directorio raíz de mi proyecto (que contiene una carpeta src
):
docker build -t myapp:dev .
El error que me sale es:
lstat src/config.json: no existe tal archivo o directorio
Si inserto RUN pwd
, la compilación de docker lo informa como /
, pero no sé si esto es lo que considera su 'contexto' (es decir, cualquier comando ADD
es relativo a pwd
).
El comando de docker build
tiene un parámetro requerido, una ruta al contexto para enviar al motor de docker para realizar la compilación. Esta ruta suele ser un único .
, haciendo que el comando resultante se parezca a docker build -t myimage:latest .
. Todos los comandos ADD
y COPY
extraen archivos de ese contexto, en el ejemplo anterior, se usaría el directorio actual donde ejecutó el comando de docker build
. Para el servidor y cada usuario que ejecuta los comandos de docker build
de Docker, solo necesitan pasar el directorio de trabajo que tienen en su máquina local.
La única otra cosa que puede hacer para alterar el comportamiento de los comandos ADD
y COPY
es cambiar el WORKDIR
que define la ruta relativa para los comandos dentro de su contenedor, pero no afecta dónde se extraen los archivos del contexto que envió con su comando de compilación.