【问题标题】:Copy files generated inside docker container to local host through docker-compose [duplicate]通过docker-compose将docker容器内生成的文件复制到本地主机[重复]
【发布时间】:2022-02-08 14:44:02
【问题描述】:

我有一个app,它将在docker 容器 内创建一个目录storage,并在其中存储生成的文件。我希望将这些文件和子文件夹(在存储目录内)复制到主机目录test

容器所在目录:

# sudo docker exec -it eajcdfufh /bin/bash
root#eajcdfufh:~# ls
storage
root#eajcdfufh:~ cd storage
folder1        file1

为了实现这个操作,我尝试输入volumes params,但不幸的是没有任何东西被复制到本地目录。

docker-compose.yml

version: "3.9"
services:
  app:
    build: 
        context: ./
    volumes:
        - /home/test:/root/storage
    ports:
        - "8000:8000"
   
  nginx:
    restart: always
    build:
        context: ./nginx
    ports:
      - "80:80"
    depends_on:
      - app

请问为什么什么都没有被复制?以及如何执行此类操作?

谢谢,非常感谢您的帮助!!!

【问题讨论】:

  • 在编辑docker-compose.yml 文件后,您是否重新运行过docker-compose up?如果没有,您需要在挂载出现在容器中之前执行此操作。
  • 自行撰写无法复制文件;您需要命令式docker cp 命令(似乎没有docker-compose 包装器)。您显示的卷挂载应该可以工作,假设容器/root/storage 目录是写入输出的位置;正如@NickODell 指出的那样,您必须重新启动容器(并丢失现有内容),这将隐藏该目录中原始图像中的任何内容。如果你不想要 Docker 的文件系统隔离功能,也可以考虑在容器外运行这个程序。

标签: docker docker-compose volume docker-volume


【解决方案1】:
version: "3.9"
services:
  app:
    build: 
    context: ./
    volumes:
    - ./test:/root/storage
    ports:
    - "8000:8000"
   
  nginx:
    restart: always
    build:
    context: ./nginx
    ports:
      - "80:80"
    depends_on:
      - app

这应该可以工作

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 2018-05-26
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    相关资源
    最近更新 更多