NAME¶
Podman-cp-在容器和本地文件系统之间复制文件/文件夹
SYNOPSIS¶
podman cp [options] [container:]src_path [container:]dest_path
podman container cp [options] [container:]src_path [container:]dest_path
DESCRIPTION¶
podman cp 允许复制的内容 src_path 发送到 dest_path 。可以将文件从容器复制到本地计算机,反之亦然,或者在两个容器之间进行复制。如果 -
是为任一 SRC_PATH
或 DEST_PATH
,用户还可以从 STDIN
或发送到 STDOUT
。
容器可以处于运行或停止状态,并且 src_path 或 dest_path 可以是文件或目录。
重要: podman cp 命令假设容器的路径是相对于容器根目录的(/
) , which means supplying the initial forward slash is optional and therefore sees compassionate_darwin:/tmp/foo/myfile.txt
and compassionate_darwin:tmp/foo/myfile.txt
as identical.
本地计算机路径可以是绝对值或相对值。其中 podman cp 运行命令将本地计算机的相对路径解释为相对于当前工作目录。
假设路径分隔符为 /
,第一个论点是 src_path 和第二个论点 dest_path ,行为如下:
src_path 指定文件:
dest_path 不存在
文件将保存到在创建的文件中 dest_path (请注意,父目录必须存在)。
dest_path 存在并且是一个文件
目标文件将被源文件的内容覆盖。
dest_path 存在并且是一个目录
使用中的基本名称将文件复制到此目录中 src_path 。
src_path 指定目录:
dest_path 不存在
dest_path 被创建为目录,并且源目录的内容被复制到此目录中。
dest_path 存在并且是一个文件
错误条件:无法将目录复制到文件。
dest_path 存在并且是一个目录
src_path 结尾为
/
源目录被复制到此目录中。
src_path 结尾为
/.
(即斜杠后跟圆点)源目录的内容将复制到此目录中。
该命令需要 src_path 和 dest_path 根据上述规则而存在。
如果 src_path 是本地的,并且是符号链接,即默认情况下复制的符号目标。
A 冒号 (:)用作容器及其路径之间的分隔符,也可以在指定 src_path 或 dest_path 例如,在本地机器上, file:name.txt
。
重要提示:在使用 冒号 * ( : ) in a local machine path, one must be explicit with a relative or absolute path, for example: /path/to/file:name.txt
or ./file:name.txt
*
使用 -
作为 src_path 将内容流传输到 STDIN
作为焦油档案。该命令将tar的内容提取到 DEST_PATH
在容器里。在这种情况下, dest_path 必须指定一个目录。vbl.使用 -
作为 dest_path 将资源(可以是目录)的内容作为TAR归档传输到 STDOUT
。
请注意, podman cp
从正在运行的无根容器复制时忽略权限错误。无根容器内的TTY设备由主机的根用户拥有,因此无法在容器的用户命名空间内读取。
进一步请注意, podman cp
不支持球化(例如, cp dir/*.txt
)。要将多个文件从主机复制到容器,请将xargs(1)或find(1)(或类似的链接命令工具)与 podman cp
。要将多个文件从容器复制到主机,请使用 podman mount CONTAINER
并改为在返回的挂载点上操作(请参见下面的备选方案)。
OPTIONS¶
--archive , -a¶
存档模式(复制所有UID/GID信息)。设置为True时,复制到容器的文件将所有权更改为容器的主UID/GID。如果设置为FALSE,则保留归档源的UID/GID,而不是将它们更改为目标容器的主UID/GID。缺省值为 true 。
--overwrite¶
允许用非目录覆盖目录,反之亦然。默认情况下, podman cp
例如,在尝试用目录覆盖常规文件时出错。
ALTERNATIVES¶
Podman 的 podman cp
除了实现主机和容器之间的文件复制还有更强的功能。
使用标准 [podman-mount(1)] 和 [podman-unmount(1)] 利用了整个Linux工具链,而不仅仅是cp。
只需几个简单的命令就可以将内容复制出容器或复制到容器中。例如:
要复制 /etc/foobar
目录从容器中取出并放到 /tmp
在主机上,可以执行以下命令:
mnt=$(podman mount CONTAINERID)
cp -R ${mnt}/etc/foobar /tmp
podman umount CONTAINERID
要将焦油球解压到容器中,可以执行以下命令:
mnt=$(podman mount CONTAINERID)
tar xf content.tgz -C ${mnt}
podman umount CONTAINERID
要将程序包安装到未安装DNF的容器中,可以执行以下命令:
mnt=$(podman mount CONTAINERID)
dnf install --installroot=${mnt} httpd
chroot ${mnt} rm -rf /var/log/dnf /var/cache/dnf
podman umount CONTAINERID
通过使用 podman mount
和 podman unmount
,您可以使用所有标准的Linux工具将文件移入和移出容器,而不仅仅是cp命令。
EXAMPLES¶
将文件从主机复制到容器:
podman cp /myapp/app.conf containerID:/myapp/app.conf
将文件从一个容器复制到另一个容器上的目录:
podman cp containerID1:/myfile.txt containerID2:/tmp
将容器上的目录复制到主机上的目录:
podman cp containerID:/myapp/ /myapp/
将容器上目录的内容复制到主机上的目录:
podman cp containerID:/home/myuser/. /home/myuser/
将一个容器上的目录复制到另一个容器上的目录中:
podman cp containerA:/myapp containerB:/newapp
从以下位置传输TAR归档 STDIN
到容器:
podman cp - containerID:/myfiles.tar.gz < myfiles.tar.gz
另请参阅¶
[podman(1)] , [podman-mount(1)] , [podman-unmount(1)]