容器与宿主机之间的文件复制示例
实测
主要是docker cp命令
创建场景
在宿主机创建3个文件
启动两个容器 red1, red2
1
2
3
4
5
6
|
root@nu18-vm:~# cd /usr/local/games
root@nu18-vm:/usr/local/games# touch /usr/local/games/{aa,bb.txt,cc.txt}
root@nu18-vm:/usr/local/games# docker run -d --name red1 redis
ea7854c0c552567630d318f34e5727b7d14a94f76fde85d27539c359f24c8cae
root@nu18-vm:/usr/local/games# docker run -d --name red2 redis
4255fa735d906862cfe83659f2968846c8023b23b6d5fb7ea5827c831c825dfa
|
cp命令
从容器拷贝文件到宿主机
从宿主机拷贝文件到容器 用来测试文件复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
root@nu18-vm:/usr/local/games# docker cp red1:/usr/local/bin/redis-cli ./
root@nu18-vm:/usr/local/games# ls
aa bb.txt cc.txt redis-cli
root@nu18-vm:/usr/local/games# docker cp aa red1:/tmp
root@nu18-vm:/usr/local/games# docker exec -it red1 ls /tmp
aa
root@nu18-vm:/usr/local/games# docker cp /usr/local/games/. red1:/mnt
root@nu18-vm:/usr/local/games# docker exec -it red1 ls /mnt
aa bb.txt cc.txt
root@nu18-vm:/usr/local/games#
root@nu18-vm:/usr/local/games# docker cp /usr/local/games red1:/mnt
root@nu18-vm:/usr/local/games# docker exec -it red1 ls /mnt
aa bb.txt cc.txt games
root@nu18-vm:/usr/local/games# docker exec -it red1 ls /mnt/games
aa bb.txt cc.txt
|
tar方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
root@nu18-vm:/usr/local/games# tar -c . | docker cp - red2:/tmp
root@nu18-vm:/usr/local/games# docker exec -it red2 ls /tmp
aa bb.txt cc.txt
root@nu18-vm:/usr/local/games#
root@nu18-vm:/usr/local/games# tar -c /usr/local/games | docker cp - red2:/mnt
tar: 从成员名中删除开头的“/”
root@nu18-vm:/usr/local/games# docker exec -it red2 ls /mnt/usr/local/games
aa bb.txt cc.txt
root@nu18-vm:/usr/local/games#
root@nu18-vm:/usr/local/games# tar -c -C /usr/local/games . | docker cp - red2:/mnt
root@nu18-vm:/usr/local/games# docker exec -it red2 ls /mnt
aa bb.txt cc.txt usr
|
命令的过滤版
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
环境准备
docker run -d --name red1 redis
docker run -d --name red2 redis
cd /usr/local/games
touch /usr/local/games/{aa,bb.txt,cc.txt}
cp直接拷贝
docker cp red:/usr/local/bin/redis-cli ./
docker cp aa red1:/tmp
docker exec -it red ls /tmp
docker cp /usr/local/games/. red1:/mnt
docker exec -it red1 ls /mnt
docker cp /usr/local/games red1:/mnt
docker exec -it red1 ls /mnt
docker exec -it red1 ls /mnt/games
采用tar拷贝
tar -c . | docker cp - red2:/tmp
docker exec -it red2 ls /tmp
tar -c /usr/local/games | docker cp - red2:/mnt
docker exec -it red2 ls /mnt/usr/local/games
tar -c -C /usr/local/games . | docker cp - red2:/mnt
docker exec -it red2 ls /mnt
|
文章作者
duansheli
上次更新
2019-12-25
(325c7b3)