$ oc rsync <source> <destination> [-c <container>]
You can use the CLI to copy local files to or from a remote directory in a container
using the rsync
command.
The oc rsync
command, or remote sync, is a useful tool for copying database archives to and from your pods for backup and restore purposes.
You can also use oc rsync
to copy source code changes into a running pod for development debugging, when the running pod supports hot reload of source files.
$ oc rsync <source> <destination> [-c <container>]
The source argument of the oc rsync
command must point to either a local
directory or a pod directory. Individual files are not supported.
When specifying a pod directory the directory name must be prefixed with the pod name:
<pod name>:<dir>
If the directory name ends in a path separator (/
), only the contents of the directory are copied to the destination. Otherwise, the
directory and its contents are copied to the destination.
The destination argument of the oc rsync
command must point to a directory. If
the directory does not exist, but rsync
is used for copy, the directory is
created for you.
The --delete
flag may be used to delete any files in the remote directory that
are not in the local directory.
Using the --watch
option causes the command to monitor the source path for any
file system changes, and synchronizes changes when they occur. With this
argument, the command runs forever.
Synchronization occurs after short quiet periods to ensure a rapidly changing file system does not result in continuous synchronization calls.
When using the --watch
option, the behavior is effectively the same as
manually invoking oc rsync
repeatedly, including any arguments normally passed
to oc rsync
. Therefore, you can control the behavior via the same flags used
with manual invocations of oc rsync
, such as --delete
.
Support for copying local files to or from a container is built into the CLI.
When working with oc rsync
, note the following:
rsync must be installed. The oc rsync
command uses the local rsync
tool, if present on the client
machine and the remote container.
If rsync
is not found locally or in the remote container, a tar archive
is created locally and sent to the container where the tar utility is used to
extract the files. If tar is not available in the remote container, the
copy will fail.
The tar copy method does not provide the same functionality as oc rsync
. For
example, oc rsync
creates the destination directory if it does not exist and
only sends files that are different between the source and the destination.
In Windows, the |
To copy a local directory to a pod directory:
$ oc rsync <local-dir> <pod-name>:/<remote-dir> -c <container-name>
For example:
$ oc rsync /home/user/source devpod1234:/src -c user-container
To copy a pod directory to a local directory:
$ oc rsync devpod1234:/src /home/user/source
$ oc rsync devpod1234:/src/status.txt /home/user/
The oc rsync
command exposes fewer command line options than standard rsync
.
In the case that you want to use a standard rsync
command line option that is
not available in oc rsync
, for example the --exclude-from=FILE
option, it
might be possible to use standard rsync
's --rsh
(-e
) option or RSYNC_RSH
environment variable as a workaround, as follows:
$ rsync --rsh='oc rsh' --exclude-from=<file_name> <local-dir> <pod-name>:/<remote-dir>
or:
Export the RSYNC_RSH
variable:
$ export RSYNC_RSH='oc rsh'
Then, run the rsync command:
$ rsync --exclude-from=<file_name> <local-dir> <pod-name>:/<remote-dir>
Both of the above examples configure standard rsync
to use oc rsh
as its
remote shell program to enable it to connect to the remote pod, and are an
alternative to running oc rsync
.