gpt4 book ai didi

Dockerfile,使用 VOLUME 持久化数据

转载 作者:行者123 更新时间:2023-12-01 09:50:02 26 4
gpt4 key购买 nike

在我学习 docker 的过程中,请耐心等待。我正在使用 v1.11.1
我正在制作一个 Dockerfile 并想指定应该保留容器的文件夹,这应该只保留每个用户(运行容器的计算机)。我原本以为包括:

VOLUME /path/to/dir/to/persist

就足够了,但是当我用 docker run -t -i myimage:latest bash 启动我的容器时然后手动添加文件 exit我希望能够再次找到我的文件。但是当我再次运行图像时(如上所述),添加的文件不再存在。

我已经阅读过,但答案在使用 VOLUMES 方面似乎已经过时,或者建议了我不想做的事情,即:
  • 我不想用 -v在运行命令中
  • 我宁愿不制作卷容器(对于我的一个小文件夹来说似乎有点过分)

  • 我做错了什么?任何帮助将不胜感激。

    干杯伙计们。

    更新:我可以使用命名卷保存数据,即: docker run -v name:/path/to/persist -t -i myimage:latest bash但是使用包含 VOLUME name:/path/to/persist 的 Dockerfile 构建不起作用。

    最佳答案

    不太明显的是,每次执行“docker run”时,您都在创建一个全新的容器。每个新容器将有一个新的体积。

    所以你的数据被持久化了,但你没有从你写它的容器中读取数据。

    举例说明问题

    示例 Dockerfile

    FROM ubuntu
    VOLUME /data

    正常 build
    $ docker build . -t myimage
    Sending build context to Docker daemon 2.048 kB
    Step 1 : FROM ubuntu
    ---> bd3d4369aebc
    Step 2 : VOLUME /data
    ---> Running in db84d80841de
    ---> 7c94335543b8

    现在运行两次
    $ docker run -ti myimage echo hello world
    $ docker run -ti myimage echo hello world

    看看卷
    $ docker volume ls
    DRIVER VOLUME NAME
    local 078820609d31f814cd5704cf419c3f579af30672411c476c4972a4aad3a3916c
    local cad0604d02467a02f2148a77992b1429bb655dba8137351d392b77a25f30192b

    “docker rm”命令有一个特殊的“-v”选项,可以清除与容器相关的任何卷。
    $ docker rm -v $(docker ps -qa)

    如何使用数据容器

    使用上一个示例中构建的相同 docker 镜像创建一个容器,其唯一目的是通过其卷保存数据
    $ docker create --name mydata myimage

    启动另一个容器,将一些数据保存到“/data”卷中
    $ docker run -it --rm --volumes-from mydata myimage bash
    root@a1227abdc212:/# echo hello world > /data/helloworld.txt
    root@a1227abdc212:/# exit

    启动第二个容器来检索数据
    $ docker run -it --rm --volumes-from mydata myimage cat /data/helloworld.txt
    hello world

    清理,只需删除容器并指定“-v”选项以确保其卷被清理。
    $ docker rm -v mydata

    笔记:
  • “volumes-from”参数意味着所有数据都保存到与“mydata”容器关联的底层卷中
  • 运行容器时,“rm”选项将确保它们被自动删除,这对一次性容器很有用。
  • 关于Dockerfile,使用 VOLUME 持久化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39317669/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com