docker容器与宿主机、容器与容器之间的文件拷贝
一、需求描述
日常工作中操作docker容器,经常需要在容器和主机之间进行文件拷贝。
docker cp
命令用于在 docker 容器和宿主机之间复制文件或目录,可以帮助我们完成对应的工作。
本文说明如何实现在容器与宿主机、容器与容器之间进行文件拷贝。
二、docker容器与宿主机之间文件交换
2.1 从宿主机复制到容器
语法格式:
sudo docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
参数:
-
CONTAINER:SRC_PATH
、DEST_PATH|-
CONTAINER:SRC_PATH
指定了容器内的源文件或目录的路径,而DEST_PATH|-
则指定了宿主机上的目标路径,或者通过-
使用标准输入/输出设备以流的方式读取或写入 tar 文件。 -
[OPTIONS]
可选参数
OPTIONS
,目前唯一的选项是--follow-link
或-L
,这个选项让命令总是遵循SRC_PATH
中的符号链接。
示例:
# 创建容器
sudo docker run -it -d --name=ubun20 ubuntu:20.04 /bin/bash
# 拷贝文件到容器
sudo docker cp /home/username/Download/atest.zip ubun20:/root/.
2.2 从容器复制到宿主机
语法格式:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
参数:
-
CONTAINER:SRC_PATH
、DEST_PATH|-
CONTAINER:SRC_PATH
指定了容器内的源文件或目录的路径,而DEST_PATH|-
则指定了宿主机上的目标路径,或者通过-
使用标准输入/输出设备以流的方式读取或写入 tar 文件。 -
[OPTIONS]
可选参数
OPTIONS
,目前唯一的选项是--follow-link
或-L
,这个选项让命令总是遵循SRC_PATH
中的符号链接。
示例:
# 创建容器
sudo docker run -it -d --name=ubun20 ubuntu:20.04 /bin/bash
# 拷贝文件到容器
sudo docker cp /home/username/Download/atest.zip ubun20:/root/.
# 将拷贝到容器的文件拷贝到宿主机另一个文件夹
sudo docker cp ubun20:/root/atest.zip /home/username/.
2.3 docker cp 操作注意
- 被操作的容器可以是运行状态,也可以是停止状态。
- 有些路径是不能复制的,例如
/proc
、/sys
、/dev
、tmpfs
以及容器中通过 mount 命令挂载的路径。
2.4 另一种方式
创建容器时,通过-v参数映射宿主机目录到容器目录,可以通过映射的目录进行文件交换;
这种方式在宿主机内、容器内都是通过普通的cp
命令即可
示例:
# 创建容器,带目录映射
sudo docker run -it -d --name=ubun20 -v /home/username/testdocker:/root/test ubuntu:20.04 /bin/bash
# 拷贝文件,容器中可以用/root/test/atest.zip进行访问
sudo cp /home/username/Download/atest.zip /home/username/testdocker/.
三、容器之间文件交换
- 容器之间不能直接拷贝文件
- 可以通过以下两步操作实现容器之间文件交换
- 从容器1拷贝到宿主机
- 从宿主机拷贝到容器2
may the odds be ever in your favor ~