我有一个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
也许我不明白卷
的功能,如果是这种情况,请告诉我如何通过docker-compose.yml
文件将现有文件复制到容器。
在Dockerfile上将COPY更改为ADD。这是复制目录而不是文件的方法
前言:我意识到这个问题很古老,OP可能已经找到了解决办法,但因为我没有看到准确的答案,我觉得解决OP提出的问题以及任何相关问题都是合适的。
首先,澄清命名卷和绑定装载之间的区别。前者允许您从容器外部查看容器位置中已经存在的文件,而后者则不允许。本质上,绑定挂载的操作非常类似于在xNIX中挂载卷,这意味着挂载设备后,挂载位置中的任何文件都将被屏蔽——可以将其视为覆盖。
接下来,当您指定时/Frontend/:/var/www/html/
,您正在指定绑定挂载,这就是在中查找的原因/前端
在主机端,您希望看到的所有文件都消失了。如果我正确理解了您的最终目标,那么您希望通过容器外的完全相同的位置访问容器内/var/www/html/
中的文件。如果是这样,那么您可能希望使用命名卷和用户指定的装载点,如下所示:
volumes:
Frontend:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '/var/www/html'
php:
build: php/
volumes:
- Frontend:/var/www/html/
请注意,如果没有上面列出的driver_opts
,命名的卷将仍然存在,但主机端位置将在Docker区域。这通常类似于/var/lib/docker/体积
或类似的内容。确切的位置可以在docker检查
命令的Mount ts
部分中找到。
下面是我的PiHole实验室主机上的类似设置。
docker-compose.yml(缩写)
volumes:
etc-pihole:
etc-dnsmasq.d:
etc-unbound:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '/home/dockeruser/ct5/etc-unbound'
services:
pihole:
container_name: asbuilt_ct5
hostname: pb-asbuilt-5
volumes:
- './etc-pihole:/etc/pihole/'
- './etc-dnsmasq.d:/etc/dnsmasq.d/'
- 'etc-unbound:/etc/unbound/'
sudo docker inspect
,Mount
部分的输出(缩写)
"Mounts": [
{
"Type": "bind",
"Source": "/home/dockeruser/ct5/etc-dnsmasq.d",
"Destination": "/etc/dnsmasq.d",
},
{
"Type": "bind",
"Source": "/home/dockeruser/ct5/etc-pihole",
"Destination": "/etc/pihole",
},
{
"Type": "volume",
"Name": "ct5_etc-unbound",
"Source": "/var/lib/docker/volumes/ct5_etc-unbound/_data",
"Destination": "/etc/unbound",
"Driver": "local",
}
]
容器文件列表:/etc/un绑定
root@pb-asbuilt-5:/# ls /etc/unbound
unbound.conf unbound.conf.d unbound_control.key unbound_control.pem unbound_server.key unbound_server.pem
主机端文件列表:/home/dockruser/ct5/etc未绑定
[dockertest-srv1] > ls /home/dockeruser/ct5/etc-unbound
unbound.conf unbound.conf.d unbound_control.key unbound_control.pem unbound_server.key unbound_server.pem
鉴于
volumes:
- /dir/on/host:/var/www/html
如果/dir/on/host
不存在,则会在主机上创建它,并将空内容装载在/var/www/html
的容器中。在卸载卷之前,容器中/var/www/html
中的任何内容都是不可访问的;新挂载正在隐藏旧内容。
我正在使用docker容器来编译一段代码,我不一定要将其docker化。我已使用必要的构建工具设置了一个映像,但我希望以某种方式将编译后的文件从容器中取出,而无需使用docker cp container:/file host/file命令。换句话说,我希望自动化这个过程,以便在构建完成后,将生成的文件复制到主机。 Dockerfile
我正在编写一个Docker文件,我的要求是将容器内文件夹的内容复制到本地主机。我怎么能做到这一点呢?
问题内容: 我正在尝试为我们使用的Docker容器构建备份和还原解决方案。 我已经创建了Docker基本映像,并且不想每次都使用Docker文件重建它来向其添加文件。 我想创建一个从主机运行的脚本,并使用Docker映像创建一个新容器,然后将文件复制到该容器中。 如何将文件从主机复制到容器? 问题答案: 该命令可用于复制文件。 可以将一个特定文件复制到容器中,例如: 可以从容器中复制一个特定文件,
问题内容: 我正在考虑使用Docker在持续集成(CI)服务器上构建我的依赖项,这样我就不必在代理程序本身上安装所有运行时和库。 为此,我需要将容器内部构建的构建工件复制回主机。那可能吗? 问题答案: 为了将文件从容器复制到主机,可以使用以下命令 这是一个例子: 这里 goofy_roentgen 是我从以下命令获得的容器名称: 您还可以使用(部分) 容器ID 。以下命令等效于第一个
问题内容: 我正在尝试将一组文件从Docker主机复制到容器。在AUFS系统上,直接进入/ var / lib / docker / aufs / …即可。但是我是另一个使用Fedora的系统,它具有devicemapper作为存储驱动程序。在这个系统上,如果我这样做: 我什么都没有。我已经尝试了将文件从主机复制到Docker容器的所有建议 使用tar似乎很棒,而不是直接转到基础FS。但是我不能假
我一无所获。我尝试了从将文件从主机复制到Docker容器的所有建议 使用tar似乎很棒,而不是直接去底层FS。但我不能假设焦油会出现在所有容器中。 如果是相关的,我甚至尝试在容器中创建一个文件,但它然后做了一个查找。-在/var/lib/docker/devicemapper/mnt中命名无效。