Docker容器中文件与本地相互复制拷贝方式
作者:社畜阿藏405
前言
遇到一些问题需要将docker内的容器拷贝到本地同时举一反三将本地文件或者文件夹拷贝到容器中的方法
这里主要讲解方法,故一法通万法通
先上结果
# 本地到服务器 docker cp 本地路径 容器id或者容器名字:容器内路径 # 服务器到本地 docker cp 容器id或者容器名字:容器内路径 本地路径
首先您既然看到了我的博客就说明我们要走一走正常的路,而不是在CSDN或者其他论坛甚至百度上面肆意驰骋试错,我们首先打开Docker官网
然后我们鼠标在Developers上悬停之后点击Docs 接下来我们就进入到了docker docs,也可以直接进入这个网站
然后我们需要在搜索栏中敲入我们想查询的东西,大家都是程序猿所以复制嘛很通俗的单词copy
这里我们会发现检索出来了很多东西,我们只需要找到我们想用的就好了
英语不是很好的话可以通过chrome的翻译功能,我就不是很好我们可以发现
我们成功找到了位置
重点
接下来我们要对这段话进行翻译
Extended descriptionCopy files/folders between a container and the local filesystem
Use ‘-‘ as the source to read a tar archive from stdin and extract it to a directory destination in a container. Use ‘-‘ as the destination to stream a tar archive of a container source to stdout.
扩展说明:
在容器和本地文件系统之间复制文件/文件夹 使用“-”作为源从标准输入读取 tar 存档并将其解压缩到容器中的目录目标。使用“-”作为将容器源的 tar 存档流式传输到标准输出的目标。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- # 解读命令 CONTAINER:SRC_PATH => 表示前面是容器:后面是容器的 # 解读命令 DEST_PATH => 本地路径 # 至于-的意思在上述文字中表述股这里不做赘述
如果没有tar的情况可以直接用
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH # 解读命令 CONTAINER:SRC_PATH => 表示前面是容器:后面是容器的 # 解读命令 DEST_PATH => 本地路径
测试!!!(因为在学习zookeeper这里用zookeeper作为例子)
下方的shell不做任何解释解释都在下方shell的# 后面的注释中了,我想偷懒嗯嗯不想整理了(没用“-”的原因是因为我没有tar
# 首先查看是否有我想要复制的文件,这里面是没有的 root@azang405:/# ls azang_data dev lib libx32 mnt root srv tmp bin etc lib32 lost+found opt run swapfile usr boot home lib64 media proc sbin sys var # 将zookeeper中的zkCLi.sh复制出来 root@azang405:/# docker cp my-zookeeper:/apache-zookeeper-3.7.0-bin/bin/zkCli.sh / # 这里会发现他出现了在第一排最后一个位置成功! root@azang405:/# ls azang_data etc lib64 mnt run sys zkCli.sh bin home libx32 opt sbin tmp boot lib lost+found proc srv usr dev lib32 media root swapfile var # 我们先创建一个测试用的azang文件夹 root@azang405:/# mkdir azang # 现在本地中查看是否创建成功 root@azang405:/# ls azang dev lib32 media root swapfile var azang_data etc lib64 mnt run sys zkCli.sh bin home libx32 opt sbin tmp boot lib lost+found proc srv usr root@2c82c6d0750e:/apache-zookeeper-3.7.0-bin/bin# ls README.txt zkCli.cmd zkEnv.cmd zkServer-initialize.sh zkServer.sh zkSnapShotToolkit.sh zkSnapshotComparer.sh zkTxnLogToolkit.sh zkCleanup.sh zkCli.sh zkEnv.sh zkServer.cmd zkSnapShotToolkit.cmd zkSnapshotComparer.cmd zkTxnLogToolkit.cmd #接下来我们进行复制 root@azang405:/# docker cp /azang my-zookeeper:/apache-zookeeper-3.7.0-bin/bin/ # 重新查看 容器内部这里我们可以找到azang文件夹 root@2c82c6d0750e:/apache-zookeeper-3.7.0-bin/bin# ls README.txt zkCleanup.sh zkCli.sh zkEnv.sh zkServer.cmd zkSnapShotToolkit.cmd zkSnapshotComparer.cmd zkTxnLogToolkit.cmd azang zkCli.cmd zkEnv.cmd zkServer-initialize.sh zkServer.sh zkSnapShotToolkit.sh zkSnapshotComparer.sh zkTxnLogToolkit.sh
这里从容器中复制到容器外部不做演示
重复一下结果
# 本地到服务器 docker cp 本地路径 容器id或者容器名字:容器内路径 # 服务器到本地 docker cp 容器id或者容器名字:容器内路径 本地路径
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。