在开发 Docker 项目时,您可能需要在 Docker 容器和本地计算机之间复制文件。使用特定的 Docker 构建上下文构建 Docker 镜像后,如果只是为了在容器中添加一些小文件或文件夹而反复构建镜像,可能会非常耗时,因为 Docker 镜像通常非常大。
Docker 为我们提供了非常有用的复制命令,使我们能够无缝地在 Docker 容器和本地系统之间复制文件。在本文中,我们将通过实际示例讨论如何使用Docker cp命令。
什么是 Dockerfile?
Dockerfile是一个文本文件,包含一系列用于构建 Docker 镜像的指令。我们在此指定基础镜像、应用程序代码、依赖项以及维护和运行代码所需的配置等指令。它有助于确保在不同环境中部署应用程序时的一致性和可重复性。这使得 Dockerfile 对于持续集成和持续部署( CI/CD) 工作流程至关重要。
什么是 Docker 容器?
Docker 容器运行包含应用程序代码的Docker 镜像进程。它通常被定义为轻量级的可执行包。它包含运行软件所需的所有内容(例如代码、运行时、库和设置)。这些内容具有高度可移植性,可以轻松地在开发、测试和生产环境中一致地部署应用程序。这些内容对于微服务架构促进高效的资源利用和可扩展性至关重要。
Docker 容器 cp
docker container cp命令方便我们在 docker 容器和主机系统之间复制文件或目录。它有助于在容器之间传输数据、配置文件或日志,而无需重新启动或重建容器。它方便我们轻松地进行数据交换、开发和生产环境。
句法
docker container cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
Docker 容器 cp 的选项
以下是docker容器cp的选项:
选项 | 描述 |
---|---|
-L, --follow-link |
它总是遵循源路径中的符号链接。 |
--help |
它打印命令用法 |
-p, --pause |
如果容器正在运行,则在复制之前暂停容器(默认为 true) |
--quiet, -q |
它抑制进度输出 |
--archive, -a |
存档模式(复制所有特殊文件) |
我们为什么要使用 Docker cp?
以下是使用 docker cp 命令的一些主要原因:
-
数据传输:它提供了一种简单直接的方法,用于将文件或目录复制进或复制出 cotnaienrs。
-
配置管理:它有助于提供 Docker 容器内配置文件的无缝管理,确保整个环境中的配置一致。
-
调试和故障排除:它帮助开发人员从容器中提取日志、错误消息或其他诊断信息到主机系统进行分析。它有助于有效地识别和解决问题。
如何将 Docker 容器中的文件复制到主机?分步指南
以下步骤指导您如何使用 docker copy 将文件从容器复制到主机:
步骤1:创建Docker容器
- 首先使用docker run命令创建一个docker容器,指定docker镜像并分配名称和选项,命令如下:
sudo docker run -it --name my-container ubuntu
步骤 2:在容器内创建文件
- 创建正在运行的容器并导航到其中内部后,创建一个文件并在其中保存一些文本。以下代码用于创建名为 geeksforgeeks.txt 的文件,其中包含一些文本“geeksforgeeks”。
echo “geeksforgeeks”> geeksforgeeks.txt
- 要退出容器并使其处于运行状态,请按ctrl+p+q,或者通过运行 exit 命令来停止容器。
步骤3:获取容器ID
- 在这里,我们执行 exit 命令,并通过 stop 命令退出容器。现在,使用 container_name 启动容器,并使用以下命令获取其容器 ID:
sudo docker start my-container
sudo docker container ls
步骤 4:将文件复制到本地系统
-
使用 docker cp 命令复制在 docker 容器内创建的文件,如下所示。这里我们指定 docker 容器文件系统作为源路径,主机系统路径作为目标路径。
-
执行此命令后,容器中的文件将被复制到我们指定的主机系统。
sudo docker cp 135950565ad8:/geeksforgeeks.txt ~/Desktop/geeksforgeeks.txt
-
第一个路径(源)是Docker 容器中的路径,第二个路径是本地系统(目标)内的路径。
-
通过docker copy这种方式,我们成功的将文件从容器中复制到了宿主机系统中。
Docker 如何将文件从主机复制到容器?分步指南
以下步骤指导您将文件从本地计算机复制到 Docker 容器:
步骤 1:在本地机器上创建文件
- 首先在本地主机系统中创建一个文件并向该文件添加一些文本,这里我们创建了 to-be-copied.txt 文件,其中包含文本“Hello GeeksForGeeks”
步骤2:将文件复制到容器
- 您可以使用cp 指令。左侧路径应位于本地计算机(源),右侧路径应位于 Docker 容器(目标)。
sudo docker cp ~/Desktop/to-be-copied.txt 135950565ad8:/to-be-copied.txt
步骤 3:验证复制的文件
-
为了验证文件是否成功复制到容器。启动docker容器并进入容器内部,为容器提供可执行的交互式bash程序。
-
以下命令可帮助您进入 docker 容器。以下屏幕截图显示了成功复制主目录中的文件。
sudo docker exec -it my-container /bin/bash
如何将主机目录挂载到 Docker 容器?
以下命令有助于将主机目录挂载到 Docker 容器:
docker run -v /path/on/host:/path/in/container image_name
- 在这里,将 \<要挂载的主机路径> 替换为您的主机路径挂载目录,将 \<容器名称> 替换为您期望的容器路径。
例子
以下命令是将主机目录与容器目录一起挂载的示例:
docker run -v /myfold:/tmp --name mycontainer1 centos
使用 cat 命令将主机文件复制到 Docker 容器
- 如果要将文件从主机复制到 docker 容器,可以使用“cat”命令。以及下图所示的“docker exec”命令。
docker exec -i <container name or container ID> sh -c 'cat > <Container path>' < <Host path>
例子
以下是使用 cat 命令将主机文件复制到 docker 容器的示例:
docker exec -i mycontainer sh -c 'cat > /new_file.txt' < file.txt
将 tar 文件从主机系统复制到 Docker 容器
- 首先,使用要复制的文件或目录的 tar 命令创建一个 tar 文件。使用以下命令。
tar -cvf <file name>
- 创建 tar 文件后,请将 tar 文件从主机复制到容器中。使用以下命令。
docker cp file.tar.gz <Container name:path of container>
Docker 将文件夹从主机复制到容器
- 要将文件夹从主机复制到 Docker 容器,可以使用该
docker cp
命令。操作方法如下:
docker cp /path/to/local/folder container_name:/path/in/container <Container_name>
- 将其替换
/path/to/local/folder
为主机上文件夹的路径、container_name
目标容器的名称或 ID 以及/path/in/container
容器内的目标路径。
例子
以下是将文件夹从主机系统复制到容器的示例:
docker cp myfold mycontainer:/tmp
Docker 将文件夹从容器复制到主机
-
要将文件夹从 Docker 容器复制到主机,您可以再次使用以下
docker cp
命令:docker cp container_name:/path/in/container /path/on/host
-
将其替换
container_name
为源容器的名称或 ID、/path/in/container
容器内文件夹的路径以及/path/on/host
主机上的目标路径。
Dockerfile 复制命令
- 要在构建过程中将文件或文件夹从主机复制到 Docker 镜像中,可以使用
COPY
Dockerfile 中的指令。以下是示例:
复制/路径/在/主机/路径/在/容器中
- 将其替换
/path/on/host
为主机上文件或文件夹的路径,并将/path/in/container
其替换为 Docker 镜像内的目标路径。
Docker cp 命令示例
以下是一些docker cp命令示例:
- 从主机复制文件到容器
docker cp <host_file_path> <container_name>:<container_path>
- 将文件从容器复制到主机
docker cp <container_name>:<container_path> <host_file_path>
- 将文件夹从主机复制到容器
docker cp <host_folder_path> <container_name>:<container_path>
- 将文件夹从容器复制到主机
docker cp <container_name>:<container_folder_path> <host_file_path>
注意:用您的路径名替换这些指定的路径名。
Docker cp 命令的漏洞
以下是docker cp命令的一些漏洞:
-
数据泄露:如果 docker cp 使用不当,容器中的敏感数据可能会泄露给主机系统,反之亦然,从而导致数据泄露,有可能危及机密性和安全性。
-
文件系统操作:在攻击者手中,docker cp可用于操作容器内的文件,从而导致未经授权的更改、注入恶意代码或篡改关键系统文件。
-
权限提升:不当使用 docker cp 可能会导致权限提升漏洞,攻击者通过将文件复制到容器文件系统的敏感区域来再次提升权限。
-
资源耗尽:重复或过度使用 docker cp 会消耗系统资源,导致性能下降或出现 DoS 情况,尤其是在资源有限的共享或多租户环境中