搜索

5.11. 在两个容器间共享文件

download PDF

使用卷可以持久保留容器中的数据,即使容器被删除。卷可用于在多个容器间共享数据。卷是保存在主机上的文件夹。卷可以在容器和主机间共享。

主要优点是:

  • 卷可以在容器间共享。
  • 卷可以更容易备份或迁移。
  • 卷不会增加容器的大小。

先决条件

  • container-tools 元数据包已安装。

流程

  1. 创建卷:

    $ podman volume create hostvolume
  2. 显示卷的信息:

    $ podman volume inspect hostvolume
    [
        {
            "name": "hostvolume",
            "labels": {},
            "mountpoint": "/home/username/.local/share/containers/storage/volumes/hostvolume/_data",
            "driver": "local",
            "options": {},
            "scope": "local"
        }
    ]

    请注意,它会在卷目录中创建一个卷。您可以将挂载点路径保存到变量,以便更轻松地操作: $ mntPoint=$(podman volume inspect hostvolume --format {{.Mountpoint}})

    请注意,如果您运行 sudo podman volume create hostvolume,则挂载点会更改为 /var/lib/containers/storage/volumes/hostvolume/_data

  3. 使用存储在 mntPoint 变量中的路径来在目录中创建一个文本文件:

    $ echo "Hello from host" >> $mntPoint/host.txt
  4. 列出 mntPoint 变量所定义的目录中的所有文件:

    $ ls $mntPoint/
    host.txt
  5. 运行名为 myubi1 的容器,并将主机上 hostvolume 卷名定义的目录映射到容器上的 /containervolume1 目录:

    $ podman run -it --name myubi1 -v hostvolume:/containervolume1 registry.access.redhat.com/ubi9/ubi /bin/bash

    请注意,如果您使用 mntPoint 变量定义的卷路径(-v $mntPoint:/containervolume1),则在运行 podman volume prune 命令时数据可能会丢失,因为这会删除未使用的卷。始终使用 -v hostvolume_name:/containervolume_name

  6. 列出容器上共享卷中的文件:

    # ls /containervolume1
    host.txt

    您可以查看在主机上创建的 host.txt 文件。

  7. /containervolume1 目录中创建一个文本文件:

    # echo "Hello from container 1" >> /containervolume1/container1.txt
  8. 使用 CTRL+pCTRL+q 从容器分离。
  9. 列出主机上共享卷中的文件,您应该看到两个文件:

    $ ls $mntPoint
    container1.rxt  host.txt

    此时,您要在容器和主机间共享文件。要在两个容器之间共享文件,请运行另一个名为 myubi2 的容器。

  10. 运行名为 myubi2 的容器,并将主机上 hostvolume 卷名定义的目录映射到容器上的 /containervolume2 目录:

    $ podman run -it --name myubi2 -v hostvolume:/containervolume2 registry.access.redhat.com/ubi9/ubi /bin/bash
  11. 列出容器上共享卷中的文件:

    # ls /containervolume2
    container1.txt host.txt

    您可以看到您在主机上创建的 host.txt 文件,以及您在 myubi1 容器中创建的 container1.txt 文件。

  12. /containervolume2 目录中创建一个文本文件:

    # echo "Hello from container 2" >> /containervolume2/container2.txt
  13. 使用 CTRL+pCTRL+q 从容器分离。
  14. 列出主机上共享卷中的文件,您应该看到三个文件:

    $ ls $mntPoint
    container1.rxt  container2.txt host.txt

其他资源

  • podman-volume man page
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.