Copiar archivos a un contenedor con Docker Compose


Tengo un 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 

Captura de pantalla del listado de directorios con docker exec

Pero cuando uso un archivo docker-compose.yml solo hay el directorio aw3somevideo y dentro de aw3somevideo no hay nada.

Docker-compose.yml :

 php:
    build: php/
    volumes:
      - ./Frontend/ :/var/www/html/
      - ./Frontend/index.php :/var/www/html/
    ports:
      - 8100:80

Captura de pantalla de la lista de directorios vacía

Tal vez no entiendo la función de volumes y si ese es el caso, por favor dígame cómo copiar mis archivos existentes a el contenedor a través de un archivo docker-compose.yml.

Author: alexmuller, 2016-08-27

1 answers

Actualizado en abril de 2017

El comportamiento ha cambiado desde que escribí la respuesta original. Ahora es consistente si el lado derecho especifica un volumen con nombre como myvolume o una ruta en el host como /var/lib/myapp. Por ejemplo

    volumes:
      - /dir/on/host:/var/www/html

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. Lo que estaba en /var/www/html antes es inaccesible.

---- respuesta anterior -----------

La sección volumes: en su docker-compose sobrescribe lo que está en el directorio /var/www/html.

Hay dos situaciones principales: {[14]]}

  1. El volumen existe

    En ese caso, el contenido del volumen eclipsa lo que está en el directorio dst.

    Eg:

    volumes:
      - /dir/on/host:/var/www/html
    
  2. El volumen no existe

    Si myvolume no existe (por ejemplo, un volumen con nombre), el contenido de /var/www/html se copiará al volumen la primera vez alrededor

    volumes:
      - myvolume:/var/www/html
    

En el caso 2, si intenta montar el mismo volumen de nuevo en algún contenedor, seguirá el caso 1.

    volumes:
      - myvolume:/var/www/html

En ese caso (suponiendo que myvolume ya fue creado), el contenido de /var/ww/html será sobrescrito (sombreado) por lo que esté en myvolume.

El documento oficial entra en más detalles https://docs.docker.com/compose/compose-file/#/volumes-volume-driver

 27
Author: Alkaline,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-24 11:01:31