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