【问题标题】:Persisting the images from Docker Container to host named volume将 Docker 容器中的图像持久化到主机命名卷
【发布时间】:2021-08-23 08:04:38
【问题描述】:

我正在使用节点服务器并使用 docker 部署它。我的项目目录中有一个“上传”目录,其中存储了所有图像/视频和文件。如果容器被删除并重新创建,我想保留上传文件夹。

docker run -d --name my_container --net="host" -v uploads_storage:/../uploads my_image:latest

uploads_storage 是一个命名卷。

/../uploads 是我的容器上的上传位置

问题是,如果我删除容器并重新启动它,文件不会保留。

我需要什么,我想将上传目录中的所有文件持久化到主机中。如果容器被移除并重新启动,则持久化位置中的所有文件都将移回容器,因此可以从我的节点服务器访问它。

【问题讨论】:

    标签: node.js docker dockerfile


    【解决方案1】:

    您的卷规范中似乎存在语法错误。 如果您指定“/../uploads”,则容器希望它位于顶级目录(第一个“/”),然后是上方的一个目录(“..”),但“/”上方没有任何内容。

    下面是 docker-compose 中做你想做的事的例子:

    • 创建一个容器,映射到主机上的目录(“./uploads”)和容器中的“/uploads”
    • 如果您移除/删除容器并重新启动它,您会再次看到相同的文件。
    version: '3.9'
    
    services:
      shell:
        image: ubuntu:latest
        restart: "no"
        container_name: my_container
        volumes:
          - ./uploads:/uploads
        networks:
          - my_network
        command: ["sleep","3650d"]
    
    networks:
      my_network:
        name: my_network
    

    在与此 docker-compose.yml 文件相同的级别上创建一个名为“uploads”的目录

    运行这个

    $ docker-compose up -d
    

    在主机上的 ./uploads 中创建一个虚拟文件:

    $ echo "Hello World" > ./uploads/hello.txt
    

    然后进入容器:

    $ docker exec -it my_container /bin/bash
    

    在容器中检查文件

    # ls -la /uploads
    

    你会看到文件在那里。您可以在两个位置编辑它:在主机上和在容器中。 它与您正在编辑的文件相同。

    【讨论】:

      猜你喜欢
      • 2016-12-20
      • 2016-07-27
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多