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_PATHDEST_PATH ,用户还可以从 STDIN 或发送到 STDOUT

容器可以处于运行或停止状态,并且 src_pathdest_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_pathdest_path 根据上述规则而存在。

如果 src_path 是本地的,并且是符号链接,即默认情况下复制的符号目标。

A 冒号 (:)用作容器及其路径之间的分隔符,也可以在指定 src_pathdest_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 mountpodman 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)]