Tengo un lugar Dockerfile
donde copio un directorio existente (con contenido) al contenedor que funciona bien:
Dockerfile
FROM php:7.0-apache
COPY Frontend/ /var/www/html/aw3somevideo/
COPY Frontend/ /var/www/html/
RUN ls -al /var/www/html
RUN chown -R www-data:www-data /var/www/html
RUN chmod -R 755 /var/www/html
Pero cuando uso un docker-compose.yml
archivo, solo está el directorio aw3somevideo
y dentro aw3somevideo
no hay nada.
docker-compose.yml :
php:
build: php/
volumes:
- ./Frontend/ :/var/www/html/
- ./Frontend/index.php :/var/www/html/
ports:
- 8100:80
Tal vez no entiendo la función de volumes
y, si ese es el caso, dígame cómo copiar mis archivos existentes al contenedor a través de un docker-compose.yml
archivo.
docker
copy
docker-compose
volumes
El doctor
fuente
fuente
volumes:
sección de tu archivo docker-compose. Tu imagen ya tiene los datos. La sección volúmenes: simplemente sobrescribe los datos. También muévase al formato actual de docker-compose (versión 2).Respuestas:
Dado
si
/dir/on/host
no existe, se crea en el host y el contenido vacío se monta en el contenedor en/var/www/html
. Cualquier contenido que tuviera antes/var/www/html
dentro del contenedor es inaccesible, hasta que desmonte el volumen; la nueva montura oculta el contenido anterior.fuente
var/www/html/
ya no se copie/dir/on/host
incluso cuando no existe? ¿Hay alguna forma de forzar la copia de los datos desde el contenedor de la ventana acoplable al host cuando se ataca un contenedor por primera vez?docker run -v /dir/on/host:/hostdir php sh -c "cp -rp /var/www/html/* /hostdir && exec myapp"
. No olvide utilizarexec
para invocar el comando final para que se le asigne PID1. Eso asegurará que myapp reciba señales de terminación (Ctrl-C por ejemplo).