使用 docker cp 命令是容器與宿主機(jī)之間復(fù)制文件的常用方法,其操作類似于 linux 的 cp 命令。1. 將宿主機(jī)文件復(fù)制到容器:語法為 docker cp [宿主機(jī)路徑] [容器id/名稱]:[容器內(nèi)目標(biāo)路徑],如 docker cp app.py my_container:/var/www/;2. 從容器復(fù)制文件到宿主機(jī):語法順序相反,如 docker cp my_container:/var/log/app.log ./logs/,可先進(jìn)入容器查看文件結(jié)構(gòu);3. 支持復(fù)制整個(gè)目錄,如 docker cp src my_container:/home/app/,復(fù)制大文件時(shí)速度可能受限于系統(tǒng)性能。
在 Docker 容器和宿主機(jī)之間復(fù)制文件,最常用的方法就是使用 docker cp 命令。這個(gè)命令類似于 Linux 的 cp 命令,但專門用于在容器和宿主機(jī)之間傳輸數(shù)據(jù)。
1. 把文件從宿主機(jī)復(fù)制到容器里
語法格式是這樣的:
docker cp [宿主機(jī)上的路徑] [容器ID或名稱]:[容器內(nèi)的目標(biāo)路徑]
舉個(gè)例子,如果你想把本地的 app.py 文件復(fù)制到名為 my_container 的容器中的 /var/www/ 目錄下,就可以這樣寫:
docker cp app.py my_container:/var/www/
注意幾點(diǎn):
- 容器必須存在(可以是運(yùn)行中,也可以是停止?fàn)顟B(tài))
- 路徑要寫對(duì),特別是容器內(nèi)部的路徑,如果目錄不存在會(huì)報(bào)錯(cuò)
- 如果你不確定容器名字或 ID,可以用 docker ps 查看當(dāng)前運(yùn)行的容器,或者用 docker ps -a 看所有容器
2. 把文件從容器復(fù)制回宿主機(jī)
反過來也是一樣操作,只是順序換一下:
docker cp [容器ID或名稱]:[容器內(nèi)的文件路徑] [宿主機(jī)上的目標(biāo)路徑]
比如你想把容器里的 /var/log/app.log 拿出來保存到當(dāng)前目錄下的 logs 文件夾:
docker cp my_container:/var/log/app.log ./logs/
這里有個(gè)小技巧:如果你不知道容器里具體有什么文件,可以先進(jìn)入容器看看:
docker exec -it my_container /bin/bash
然后用 ls 找到你要復(fù)制的文件路徑,再退出來執(zhí)行 docker cp。
3. 復(fù)制整個(gè)目錄也一樣操作
不管是復(fù)制單個(gè)文件還是整個(gè)目錄,docker cp 都支持。比如復(fù)制整個(gè) src 文件夾進(jìn)去:
docker cp src my_container:/home/app/
它會(huì)自動(dòng)把整個(gè)目錄結(jié)構(gòu)一起復(fù)制進(jìn)去。反過來也一樣,你可以從容器里復(fù)制出一個(gè)目錄。
需要注意的是:復(fù)制大文件或大量文件時(shí)可能會(huì)有點(diǎn)慢,這是正常現(xiàn)象,取決于你的系統(tǒng)性能和文件大小。
基本上就這些。只要記住方向和路徑就行,docker cp 是個(gè)簡(jiǎn)單但非常實(shí)用的命令,平時(shí)調(diào)試、部署經(jīng)常用得上。