docker cp 详解搬砖版

144 阅读2分钟

为啥写这篇

我们公司有个业务是跑在一个容器里的 , 没错 一个项目! 跑在一个容器里,容器里nginx redis nacos 各种乱七八糟服务全都有 已经相当于一个虚拟机了 一个镜像6个G 还是很久很久之前的。之后有放了乱七八糟的包我也不敢删了重启个容器

由于没做挂载映射,每次更新前端dist文件夹 (和复制文件有区别) 都要先把文件夹放到真机下,然后用docker cp 将容器里/root/dist文件夹替换掉

在操作的过程中对docker cp有了新的感悟 所以就想记录下来 ,可能也是之前学的不好

docker cp命令

 **从宿主机复制文件到容器**
docker cp /path/to/local/file.txt my_container:/path/in/container/
将宿主机上的 `file.txt` 文件复制到名为 `my_container` 的容器的指定路径下。

**从容器复制文件到宿主机**
docker cp my_container:/path/in/container/file.txt /path/to/local/


这会将容器 `my_container` 中的 `file.txt` 文件复制到宿主机的指定路径下。

**复制目录**

复制目录时,不需要额外的选项,但路径的末尾需要加上斜杠(`/`)以指示这是一个目录。


 	docker cp my_container:/path/in/container/directory/ /path/to/local/directory/


 这会将容器中的 `directory` 目录及其内容复制到宿主机的指定位置。

**使用归档模式复制**


 	docker cp -a my_container:/path/in/container/directory/ /path/to/local/archive.tar

 这会将容器中的 `directory` 目录及其内容以 tar 归档的形式复制到宿主机的 `archive.tar` 文件中,同时保留文件的元数据。


大概就是这样的用法 但是复杂就在路径 上面

docker cp SCR_PATH DEST_PATH

假设几种情况

image.png

这样看是不是就眼花撩乱了 我之前复制/home/wj/dist 替换 容器里的 /root/dist目录

我用的命令是 sudo docker cp /home/wanjia/dist 70:/root/dist 结果是 复制到/root/dist/dist了

image.png 就像这样

第二次我改了命令 sudo docker cp /home/wanjia/dist 70:/root

我本以为这样就可以覆盖了 结果就类似于追加覆盖 我只能覆盖掉文件名一样的 如果src 里没有的 那么 dest 里的也不会被覆盖

最后还是把容器里的dist删了

docker exec 70 rm -rf /root/dist  
sudo docker cp /home/wanjia/dist 70:/root/dist`