当前位置: 首页 > 知识库问答 >
问题:

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

锺离声
2023-03-14

我有一个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文件将现有文件复制到容器。

共有3个答案

淳于开畅
2023-03-14

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

薛俊美
2023-03-14

前言:我意识到这个问题很古老,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 inspectMount部分的输出(缩写)

"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
许寒
2023-03-14

鉴于

    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中命名无效。