×

您可以使用 CLI 使用rsync命令将本地文件复制到容器中的远程目录或从中复制。

了解如何复制文件

oc rsync命令(或远程同步)是将数据库存档复制到您的 Pod 或从您的 Pod 复制到您的 Pod 以进行备份和还原的有用工具。当正在运行的 Pod 支持源文件的热重载时,您还可以使用oc rsync将源代码更改复制到正在运行的 Pod 中以进行开发调试。

$ oc rsync <source> <destination> [-c <container>]

需求

指定复制源

oc rsync命令的源参数必须指向本地目录或 Pod 目录。不支持单个文件。

指定 Pod 目录时,目录名称必须以 Pod 名称作为前缀。

<pod name>:<dir>

如果目录名称以路径分隔符(/)结尾,则仅将目录的内容复制到目标。否则,将目录及其内容复制到目标。

指定复制目标

oc rsync命令的目标参数必须指向一个目录。如果目录不存在,但使用rsync进行复制,则会为您创建该目录。

删除目标中的文件

--delete标志可用于删除远程目录中本地目录中不存在的任何文件。

文件更改时的持续同步

使用--watch选项会导致命令监控源路径的任何文件系统更改,并在更改发生时同步更改。使用此参数,命令将永远运行。

同步会在短暂的静默期后发生,以确保快速变化的文件系统不会导致持续的同步调用。

使用--watch选项时的行为与重复手动调用oc rsync的效果相同,包括通常传递给oc rsync的任何参数。因此,您可以通过与手动调用oc rsync相同的标志来控制行为,例如--delete

容器间复制文件

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/

使用高级Rsync功能

oc rsync命令公开的命令行选项少于标准rsync。如果您想使用oc rsync中不可用的标准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的方法。