Lo que estoy tratando de lograr es esto: quiero almacenar en caché el directorio ~/.aws de los usuarios actuales dentro de un contenedor para poder usarlos durante la compilación de otro contenedor.
Tengo el siguiente docker-compose.yml:
version: "3.7" services: worker: depends_on: - aws aws: build: context: ~/.aws dockerfile: ./ctx.dockerfile args: - workdir=/root/.aws Estos son los contenidos de ctx.dockerfile :
FROM alpine:3.9 ARG workdir WORKDIR ${workdir} COPY . . Y en mi servicio de worker Dockerfile tengo lo siguiente:
... COPY --from=aws_ctx:local /root/.aws /root/.aws ... docker compose no trata la ruta del dockerfile en el servicio aws como relativa a docker-compose.yml, sino que asume que es relativa a la ruta de context . ¿De todos modos puedo hacer que docker-compose cargue el ctx.dockerfile desde el mismo directorio que docker-compose.yml Y establezca el contexto de la forma en que estoy?
Estoy dispuesto a cambiar mi enfoque del problema, pero tengo algunas limitaciones:
¿De todos modos puedo hacer que docker-compose cargue el ctx.dockerfile desde el mismo directorio que docker-compose.yml Y establezca el contexto de la forma en que estoy?
AFAIK: No, no lo hay.
Todo lo que interactúa con Dockerfile en el momento de la compilación debe estar en el contexto definido. Por lo tanto, necesita que .aws y la carpeta actual donde vive docker-compose.yml etc. estén en el mismo contexto, es decir, el contexto debería ser el nivel más alto de su estructura de directorio relevante y luego tendría que definir relativo rutas a los archivos que necesita (Dockerfiles y .aws ).
Tal vez podría configurar /home/$USER como su contexto de compilación (o incluso un nivel superior, dependiendo de dónde vivan sus Dockerfiles, etc.), pero luego también tendría que crear un archivo .dockerignore e ignorar todo en el contexto además .aws y la carpeta actual... Como puede ver, esto sería un desastre y poco reproducible.
Sugeriría usar un volumen en lugar de COPY la carpeta ~/.aws dentro de su contenedor.
Ejemplo:
nico@lapap12:~$ ls -l ~/.aws total 0 -rw-r--r-- 1 nico nico 0 May 22 17:45 foo.bar docker-compose.yml :
version: "3.7" services: allinone: image: alpine:latest volumes: - ~/.aws:/tmp/aws:ro command: ls -l /tmp/aws nico@lapap12:~/local/so$ docker-compose up Creating so_allinone_1 ... done Attaching to so_allinone_1 allinone_1 | total 0 allinone_1 | -rw-r--r-- 1 1000 1000 0 May 22 15:45 foo.bar so_allinone_1 exited with code 0 Puede ir desde allí y copiar el contenido de /tmp/aws a /root/.aws si desea cambiar el contenido de esta carpeta en el contenedor, pero no quiere tocarlo en el host real.