5.11. 在两个容器间共享文件
使用卷可以持久保留容器中的数据,即使容器被删除。卷可用于在多个容器间共享数据。卷是保存在主机上的文件夹。卷可以在容器和主机间共享。
主要优点是:
- 卷可以在容器间共享。
- 卷可以更容易备份或迁移。
- 卷不会增加容器的大小。
先决条件
-
container-tools
元数据包已安装。
流程
创建卷:
$ podman volume create hostvolume
显示卷的信息:
$ 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
。使用存储在
mntPoint
变量中的路径来在目录中创建一个文本文件:$ echo "Hello from host" >> $mntPoint/host.txt
列出
mntPoint
变量所定义的目录中的所有文件:$ ls $mntPoint/ host.txt
运行名为
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
。列出容器上共享卷中的文件:
# ls /containervolume1 host.txt
您可以查看在主机上创建的
host.txt
文件。在
/containervolume1
目录中创建一个文本文件:# echo "Hello from container 1" >> /containervolume1/container1.txt
-
使用
CTRL+p
和CTRL+q
从容器分离。 列出主机上共享卷中的文件,您应该看到两个文件:
$ ls $mntPoint container1.rxt host.txt
此时,您要在容器和主机间共享文件。要在两个容器之间共享文件,请运行另一个名为
myubi2
的容器。运行名为
myubi2
的容器,并将主机上hostvolume
卷名定义的目录映射到容器上的/containervolume2
目录:$ podman run -it --name myubi2 -v hostvolume:/containervolume2 registry.access.redhat.com/ubi9/ubi /bin/bash
列出容器上共享卷中的文件:
# ls /containervolume2 container1.txt host.txt
您可以看到您在主机上创建的
host.txt
文件,以及您在myubi1
容器中创建的container1.txt
文件。在
/containervolume2
目录中创建一个文本文件:# echo "Hello from container 2" >> /containervolume2/container2.txt
-
使用
CTRL+p
和CTRL+q
从容器分离。 列出主机上共享卷中的文件,您应该看到三个文件:
$ ls $mntPoint container1.rxt container2.txt host.txt
其他资源
-
您系统上的
podman-volume
手册页