Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

634
Views
Cree archivos/carpetas en docker-compose build o docker-compose up

Estoy dando mis primeros pasos en Docker, así que intenté crear un Dockerfile que crea un index.html simple y un directorio de imágenes (ver el código a continuación)

Luego ejecuto docker-compose build para crear la imagen y docker-compose-up para ejecutar el servidor. Pero no obtengo ningún archivo index.html o imágenes de carpeta.

Este es mi Dockerfile:

 FROM php:apache MAINTAINER brent@dropsolid.com WORKDIR /var/www/html RUN touch index.html \ && mkdir images

Y este es mi docker-compose.yml

 version: '2' services: web: build: .docker/web ports: - "80:80" volumes: - ./docroot:/var/www/html

Esperaría que esto creara una carpeta docroot con un directorio de imágenes y un index.html, pero solo obtengo el docroot.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

La imagen contiene esos archivos.

El Dockerfile contiene instrucciones sobre cómo crear una imagen. La imagen que creaste a partir de ese Dockerfile contiene index.html e images/ .

Pero, los sobrepasaste en el contenedor.

En tiempo de ejecución, creó un contenedor a partir de la imagen que creó. En ese contenedor, montó el directorio externo ./docroot como /var/www/html .

Un montaje ocultará lo que haya antes en esa ruta, por lo que este montaje ocultará el contenido anterior de /var/www/html , reemplazándolo con lo que esté en ./docroot .

Poner cosas en tu montura

En los comentarios que preguntaste

¿Existe la posibilidad de montar primero y luego crear archivos o algo así? ¿O es eso imposible?

De la forma en que ha hecho las cosas, los montó sobre sus archivos originales, por lo que ya no son accesibles una vez que se crea el contenedor.

Hay un par de formas en las que puedes manejar esto.

Cambiar su ruta en la imagen.

Si coloca estos archivos en una ruta diferente en su imagen, el montaje no los sobrescribirá.

 WORKDIR /var/www/alternate-html RUN touch index.html \ && mkdir images WORKDIR /var/www/html

Ahora, en tiempo de ejecución todavía tendrá este montaje en /var/www/html , que contendrá el contenido del directorio externo. Que puede o no ser un directorio vacío. Puede decirle al contenedor al inicio que ejecute un script y copie las cosas allí, si eso es lo que desea.

 COPY entrypoint.sh /entrypoint.sh RUN chmod 0755 /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]

(Esto supone que no tiene un punto de entrada definido; si lo tiene, tal vez solo necesite ajustar su script existente).

punto de entrada.sh:

 #!/bin/sh cp -r /var/www/alternate-html/* /var/www/html exec "$@"

Esto ejecutará el comando cp y luego entregará el control a cualquiera que sea el CMD para esta imagen.

Manejándolo externamente

También tiene la opción de simplemente completar previamente los archivos que desea en ./docroot externamente. Luego estarán allí cuando el contenedor se inicie y agregue el montaje del directorio.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!