7.6. 将文件复制到 OpenShift Container Platform 容器或从中复制
您可以使用 rsync 命令,通过 CLI 将本地文件复制到容器中的远程目录,或从中复制文件。
7.6.1. 了解如何复制文件 复制链接链接已复制到粘贴板!
oc rsync 命令(或远程同步)是一个实用的工具,能够将数据库存档复制到 pod 中或从 pod 中复制,以满足备份和恢复的需要。当运行的 pod 支持源文件热重载时,您还可以使用 oc rsync 将源代码更改复制到运行的 pod,从而进行开发调试。
oc rsync <source> <destination> [-c <container>]
$ oc rsync <source> <destination> [-c <container>]
7.6.1.1. 要求 复制链接链接已复制到粘贴板!
- 指定复制来源
oc rsync命令的 source 参数必须指向本地目录或 pod 目录。不支持单个文件。指定 pod 目录时,目录名称必须加上 pod 名称前缀:
<pod name>:<dir>
<pod name>:<dir>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果目录名以路径分隔符 (
/) 结尾,则只有目录的内容会复制到目的地。否则,目录及其内容都会复制到目的地。- 指定复制目的地
-
oc rsync命令的 destination 参数必须指向某个目录。如果该目录不存在,但使用rsync进行复制,系统会为您创建这个目录。 - 删除目的地上的文件
-
可以使用
--delete标志,在远程目录中删除本地目录中没有的文件。 - 在文件更改时持续同步
如果使用
--watch选项,命令可以监控源路径上的任何文件系统更改,并在发生更改时同步它们。使用这个参数时,命令会永久运行。同步会在短暂的静默期后进行,以确保迅速更改的文件系统不会导致持续的同步调用。
使用
--watch选项时,其行为实际上和手动反复调用oc rsync一致,通常传递给oc rsync的所有参数也一样。因此,您可以使用与手动调用oc rsync时相同的标记来控制其行为,比如--delete。
7.6.2. 将文件复制到容器或从容器中复制 复制链接链接已复制到粘贴板!
CLI 中内置了将本地文件复制到容器或从容器中复制文件的支持。
先决条件
在使用 oc rsync 时,请注意以下几点:
必须安装 rsync。
oc rsync命令将使用本地的rsync工具(如果存在于客户端机器和远程容器上)。如果本地或远程容器上找不到
rsync,则会在本地创建 tar 存档并发送到容器(在那里使用 tar 实用程序来解压文件)。如果远程容器中没有 tar,则复制会失败。tar 复制方法不提供与
oc rsync相同的功能。例如,oc rsync会在目的地目录不存在时创建这个目录,而且仅发送来源与目的地上不同的文件。注意在 Windows 中,应当安装
cwRsync客户端并添加到 PATH 中,以便与oc rsync命令搭配使用。
流程
将本地目录复制到 pod 目录:
oc rsync <local-dir> <pod-name>:/<remote-dir> -c <container-name>
$ oc rsync <local-dir> <pod-name>:/<remote-dir> -c <container-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc rsync /home/user/source devpod1234:/src -c user-container
$ oc rsync /home/user/source devpod1234:/src -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 pod 目录复制到本地目录:
oc rsync devpod1234:/src /home/user/source
$ oc rsync devpod1234:/src /home/user/sourceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
oc rsync devpod1234:/src/status.txt /home/user/
$ oc rsync devpod1234:/src/status.txt /home/user/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.6.3. 使用高级 rsync 功能 复制链接链接已复制到粘贴板!
与标准的 rsync 相比,oc rsync 命令可用的命令行选项比较少。如果您想要使用某个标准 rsync 命令行选项,但 oc rsync 中没有这个选项(例如,--exclude-from=FILE 选项),您可以使用标准 rsync 的 --rsh (-e) 选项或 RSYNC_RSH 变量来作为权宜之计,如下所示:
rsync --rsh='oc rsh' --exclude-from=<file_name> <local-dir> <pod-name>:/<remote-dir>
$ rsync --rsh='oc rsh' --exclude-from=<file_name> <local-dir> <pod-name>:/<remote-dir>
或:
导出 RSYNC_RSH 变量:
export RSYNC_RSH='oc rsh'
$ export RSYNC_RSH='oc rsh'
然后运行 rsync 命令:
rsync --exclude-from=<file_name> <local-dir> <pod-name>:/<remote-dir>
$ rsync --exclude-from=<file_name> <local-dir> <pod-name>:/<remote-dir>
以上两个示例将标准 rsync 配置为使用 oc rsh 作为远程 shell 程序,从而连接到远程 pod,它们是运行 oc rsync 的替代方法。