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

时间:2016-08-27 01:13:10

标签: docker copy docker-compose volumes

我有一个$results,我将现有目录(包含内容)复制到容器中,工作正常:

Dockerfile

Dockerfile

Screenshot of directory listing with docker exec

但是当我使用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-compose.ymlaw3somevideo内没有任何内容。

搬运工-compose.yml

aw3somevideo

Screenshot of empty directory listing

也许我不理解 php: build: php/ volumes: - ./Frontend/ :/var/www/html/ - ./Frontend/index.php :/var/www/html/ ports: - 8100:80 的功能,如果是这种情况,请告诉我如何通过volumes文件将现有文件复制到容器中。

2 个答案:

答案 0 :(得分:39)

2017年4月更新

自从我写完原始答案以来,行为发生了变化。现在一致的是,右侧是指定myvolume之类的命名卷还是主机上的路径,如/var/lib/myapp。 例如

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

如果/dir/on/host不存在,则在主机上创建,并在/var/www/html的容器中装入空内容。无论以前/var/www/html中的任何内容都无法访问。

----老答案-----------

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

主要有两种情况:

  1. 卷存在

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

    例如:

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

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

    volumes:
      - myvolume:/var/www/html
    
  3. 在案例2中,如果您尝试在某个容器上再次安装相同的卷,则它将遵循案例1.

        volumes:
          - myvolume:/var/www/html
    

    在这种情况下(假设已经创建了myvolume),/ var / ww / html的内容将被myvolume中的任何内容覆盖(阴影)。

    官方文档详细介绍https://docs.docker.com/compose/compose-file/#/volumes-volume-driver

答案 1 :(得分:0)

在 Dockerfile 上将 COPY 更改为 ADD。这是复制目录而不是文件的方式