7.6. 将文件复制到 OpenShift Dedicated 容器或从 OpenShift Dedicated 容器复制
您可以使用 rsync
命令,通过 CLI 将本地文件复制到容器中的远程目录,或从中复制文件。
7.6.1. 了解如何复制文件
oc rsync
命令(或远程同步)是一个实用的工具,能够将数据库存档复制到 pod 中或从 pod 中复制,以满足备份和恢复的需要。当运行的 pod 支持源文件热重载时,您还可以使用 oc rsync
将源代码更改复制到运行的 pod,从而进行开发调试。
$ oc rsync <source> <destination> [-c <container>]
7.6.1.1. 要求
- 指定复制来源
oc rsync
命令的 source 参数必须指向本地目录或 pod 目录。不支持单个文件。指定 pod 目录时,目录名称必须加上 pod 名称前缀:
<pod name>:<dir>
如果目录名以路径分隔符 (
/
) 结尾,则只有目录的内容会复制到目的地。否则,目录及其内容都会复制到目的地。- 指定复制目的地
-
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 /home/user/source devpod1234:/src -c user-container
将 pod 目录复制到本地目录:
$ oc rsync devpod1234:/src /home/user/source
输出示例
$ oc rsync devpod1234:/src/status.txt /home/user/
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
变量:
$ export RSYNC_RSH='oc rsh'
然后运行 rsync 命令:
$ rsync --exclude-from=<file_name> <local-dir> <pod-name>:/<remote-dir>
以上两个示例将标准 rsync
配置为使用 oc rsh
作为远程 shell 程序,从而连接到远程 pod,它们是运行 oc rsync
的替代方法。