使用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-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
目录中的任何内容。
有两种主要情况:
-
卷存在
在这种情况下,卷的内容会掩盖dst目录中的任何内容。
例如:
volumes: - /dir/on/host:/var/www/html
-
该卷不存在
如果
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