I often find myself starting temporary containers to transfer data between the local file-system and container volumes. Or sometimes, between volumes. And the entire process is a bit tedious. Starting a temporary container, mounting the volume, mounting the local file-system, and finally transferring the data.
So I made a python script which makes this easy. I call it cvcp
- container volume cp (copy). It actually does not use cp
though. It uses rsync
for the data transfer. So it's necessary to have a container image with rsync
installed.
You can find the script at https://github.com/jeet-parekh/cvcp. The repository also contains a Dockerfile
which will build an image with rsync
installed.
Using cvcp
Download the file cvcp
from the repository and place it inside your preferred path. I prefer ~/bin
.
Then, to use cvcp
:
cvcp SOURCE DESTINATION
Path inside a container volume should be written as <volume_name>:<path_inside_volume>
.
Either SOURCE
or DESTINATION
can be a local path or a path inside a container volume. Note however that both SOURCE
and DESTINATION
cannot be local paths.
If you use cvcp
without any options, it will pull a rsync
image from Docker Hub, and will use docker with root (sudo docker
).
The following command line options are available to customise the behaviour:
-
--docker
and--podman
- The container engine to use.
- The default is
docker
.
-
--rootless
- Use the container engine without root (without
sudo
).
- Use the container engine without root (without
-
--image
- The container image to be used.
- Note that the image needs to have
rsync
installed. Read the next section for more details.
-
--rsync-opts
- Options to pass to
rsync
. - Note that, you need to pass all the options as a quoted string with a space at the beginning. For example,
' --verbose'
. - Using this option will clear the default
rsync
options used bycvcp
, so make sure to pass all the options required. - The default options are
' -a --progress'
.
- Options to pass to
-
--no-exec
- Print the command and exit.
Using a custom image
To use a custom image with cvcp
, use the --image
argument.
To permanently change the default image that cvcp
uses, change this line in the cvcp
script file:
RSYNC_IMAGE = "image_name"
It is necessary for your custom image to have rsync
installed. You can use the Dockerfile inside the same repository as a base to build the image.
# docker
sudo docker build -t localhost/rsync .
# podman
podman build -t localhost/rsync .
Top comments (0)