使用Docker Compose将文件复制到容器

我有一个Dockerfile ,我复制一个现有的目录(与内容)的工作正常的容器:

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 

docker exec目录列表截图

但是当我使用docker-compose.yml文件时,只有目录aw3somevideo而在aw3somevideo里面什么也没有。

docker-compose.yml

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

空目录列表的屏幕截图

也许我不明白volumes的function,如果是这种情况,请告诉我如何通过docker-compose.yml文件将我现有的文件复制到容器。

2017年4月更新

自从我写下原始答案以来,行为已经发生了变化。 现在,右侧是否指定了像myvolume这样的命名卷或者是像/var/lib/myapp这样的主机上的path是一致的。 例如

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

如果/dir/on/host不存在,它将在主机上创build,并将空的内容挂载到/var/www/html的容器中。 无论在/var/www/html之前是不可访问的。

—-老回答———–

docker-composes中的volumes:部分将覆盖/var/www/html目录中的任何内容。

有两种主要情况:

  1. 卷存在

    在这种情况下,卷的内容会掩盖dst目录中的任何内容。

    例如:

     volumes: - /dir/on/host:/var/www/html 
  2. 该卷不存在

    如果myvolume不存在(例如命名卷),/ var / www / html的内容将在第一次被复制到卷

     volumes: - myvolume:/var/www/html 

在情况2中,如果尝试在某个容器上再次安装相同的容量,则将遵循情况1。

  volumes: - myvolume:/var/www/html 

在这种情况下(假设myvolume已经创build),/ var / ww / html的内容将被myvolume的任何内容覆盖(映射)。

官方文档进入更多的细节https://docs.docker.com/compose/compose-file/#/volumes-volume-driver